サイトアイコン CAD日記

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だし。

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

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

はぁ。

モバイルバージョンを終了