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

レイヤ付きPDFを出力する弊害

Illustratorという高価なアプリを使ってPDFを出力すると、PDFにレイヤが付いてしまって非表示にしたはずのレイヤが表示されて困ったなという事象に2回遭遇したので以下に記録。共通しているのが、 …

マルチスレッドプログラミング(C#編)

マルチスレッドプログラミング(C++編) マルチスレッドプログラミング(VB.net編) に続く第三弾はC#編。

no image

CADツール第2弾

 PMツールに続いてのCADツール第2弾を思いつきました。今まで、いくつかの企画があり、手をつけたものもあるのですが、いまいち乗り気にならなくてポシャってました。シリーズものとして継続したいところなの …

no image

いたちごっこ1

ソフト開発者とクラッカー。その果てしない戦いの日々をここに記します。現在進行形のその戦いに終止符を打つべく、努力を重ねている今、臨場感をもって伝えられれば、と思います。 その前に、「いたちごっこ」とい …

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

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