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 を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

no image

プロパティシート

ソフト開発の話です。 私はVC6でソフトを作ってます。 ダイアログボックスの作りこみは、おもしろいものです。 プログラマーにとっては、デザイン的センスを問われる分野ですかね。 プロパティシートとは、ペ …

no image

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

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

no image

コンピュータの日付

痛い目にあった記録。 無料試用期間30日間、そんなソフトを開発している。 動作確認するために、コンピュータの日付を変更する。 日付を数日後に変更して「残り27日です」とちゃんと出るか。 もっと先の日付 …

no image

CEditでドラッグ&ドロップ

プログラミングから離れてしばらく経ってしまった。 プロジェクト管理をやっていると、プログラミングをやることができなくなる。 対人間の仕事の合間にプログラムをやることは、おいらには無理だった。 プログラ …

no image

プログラムっておもしろいなぁとつくづく思うなり

ここんところぜんぜんプログラムを書いてなくて仕事がつまんなくなってきたところに、トラブル対応があってプログラムをじっくりと書いてみた。いやはやおもしろい。余計な仕事が飛び込んでこない環境で、スピッツ聞 …