CAD日記

主にAutoCADのことについて書いているけど、近頃は投資系ネタに注力している。自動売買、仮想通貨、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 を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

Teigha改めODAでDWGをDXFに変換するプログラムをつくってみよう!【Part.1】

Teigha改めODA(Open Design Alliance)は有料のライブラリー。商用利用するならば、最低でも年間1500ドル(初年度2000ドル)を要する。この場合、配布本数が100本に限られ …

dwgからサムネイル用画像を抜き出す方法2

dwgからサムネイル用画像を抜き出す方法として理屈上の話を書いたが、これだけでは片手落ちだと考えて、プログラム実装のところまで踏み込むことにした。 まずは、dwgからサムネイル用画像を取得して、同名フ …

デュアルモニターでツールバーをドラッグすると枠非表示で残像が出る

デュアルモニター環境で、MFCで作ったアプリをメインモニター側に出して、アプリのツールーバー(CToolBar)をドラッグすると、枠がメインモニター側に表示されずに、サブモニター側に枠と残像が表示され …

MSDNサブスクリプションっていくらするの?

MSDNとはMicrosoft Developer Networkの略で昔から使われてきた用語で、MSDNサブスクリプションという呼び名があったが、最近ではVisual Studioサブスクリプション …

no image

WinMergeのフィルタ

【2018/11/24追記】 この書きっぷりではあまりにもわかりずらいので、整理して追加情報を加えて新たな記事とした。 WinMegeのフィルタについて今すぐ知りたいならココを読め プログラマにとって …