CAD日記

AutoCAD,DXF,DWG,SXFなどCADのことから、仮想通貨や投資関係、PC関係、プログラミング、国内海外旅行情報など何でもござれ。@caddiary

ソフト開発

MultiByte と WideChar

投稿日:

文字コードは、やっかいなもの。

以下の2つの関数は、知ってるようでよく知らなかったって話。

MultiByteToWideChar( )

WideCharToMultiByte( )

UNIコードの変換に使うもんだ、というふうに抽象的に考えていたんだけど、

MultiByte と WideCharの意味を全然理解してなかったことが判明した。

今回学んだことを記しておこうと思う。

MultiByte → 文字種によってByte数が可変

WideChar → 文字種によってByte数が一定

きっかけはSolidWorks2007関係のトラブル。

SolidWorksドキュメントに文字情報を書き込んだり、読んだりする処理がある。

ファイルのカスタムプロパティってやつだ。

日本語を書き込んだ場合に、それを読むと文字化けする。

2006までは問題なかったのに、2007で作ったデータだと問題発生。

どうやら、2007で書き込んだときに特殊な文字コードで書き込むように

なっているということがわかった。

2006までは、Shift-JISで書き込まれていたんだけど、

2007では正体不明の文字コードで書かれている。

もろもろの調査により、UTF-8というUNICODEの一種だということがわかった。

(秀丸君が大変役に立った。)

UNICODEだったら、WideCharToMultiByte( )を使って

Shift-JISに変換すればいいだろぉと考えたけど、

どうやってもうまくいかない。

MSDNのドキュメントを読んでもわけわからんし、悶々とした時間を過ごした。

結論。

Shift-JISもUTF-8も両方とも、MultiByte。

UTF-8をShift-JISに変換するなら、

MultiByteToWideChar実行後、結果をWideCharToMultiByteに渡して、

この結果が答えというわけ。

Shift-JISは、ASCIIが1バイトで日本語なんかが2バイトだから典型的なMultiByte。

UTF-8は、文字種によって1~6バイトで可変なんだって。

これまたMultiByteってこと。

UNICODEの一種だから、どんな文字でも一定のバイト数で表現されると

思い込んでいたけどちがったわけだ。

じゃー、WideCharってなんなんだろ?

まだ理解が足りないな。

奥が深い世界だ...。

しかし、SolidWorksにしろAutoCADにしろ、毎年毎年よくまぁ

バージョンアップするもんだよ。

まだ2006年だってのに、バージョンは2007だし。

ユーザーもついていくのが大変だろうけど、

関わるソフト開発者も苦労が多いーよ。

はぁ。

-ソフト開発
-

執筆者:


  1. ユニコードからANSIへ変換

    LPSTR  szAnsi; int len = ::WideCharToMultiByte(CP_ACP, 0, szUnicode, -1, NULL, 0, NULL, NULL); szAnsi = (LPSTR) malloc(len + 1); memset(szAnsi,0,len + 1); ::WideCharToMultiByte(CP_ACP, 0, szUnicode, -1, szAnsi, len, NULL, NULL); return szAnsi..

comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

no image

WM_TIMER

MFCで時間を扱うための基本的なメッセージ。 プログラムの10年以上やってるけど、今まで必要なかった。 必要性を感じて調べたら、けっこうおもしれぇ。 データ変換に要している時間を、ダイアログボックス内 …

no image

軌道に乗ったか!?

 この11月の売り上げ本数が、10本の大台にのりました。私が最も力を入れているCAD関連ツールがです。喜ばしいことです。関係各位への感謝がつのります。  思えば半年前、あるユーザーの要望から始まったこ …

no image

円周率

3.1415926535…。私が記憶しているのはここまでです。スーパーコンピュータを使って数億桁まで計算、なんてニュースをよく聞きますね。コンピュータの性能向上とアルゴリズムの工夫に対する …

若いもんにC++を教えてやって、これまでやってきたことが少しでも伝わってくれればと願う夜

ファイルをセレクトするというC++で作ったActiveXのDLLのデバッグができないかと彼がおいらのところに来た時点で、そいつはなかなかチカラがあるなと感じた。

no image

簡単インストーラ

インストーラと言えば、Install Shield です。最新バージョンは11.0で価格は44万1千円。高いんです。高機能版(Premier Edition)で、多国語(全33ヶ国語)対応という代物だ …