WCHARの配列をファイルに書き出す際の注意事項

Windowsのプログラミングではワイド文字列を格納するのにWCHARという型を用いる。これはつきつめていけば、wchar_t型であり、16bitのデータなのだが、当然のごとく、リトルエンディアン・ビッグエンディアンを考慮しないと不思議な現象を引き起こしてくれる。

WCHAR型の配列、例えば
WCHAR hoge[]=L"日本語文字列";
をファイルに書き出そうとして、Windows APIのWriteFileを使ってしまい、私はどつぼにはまった。
WriteFile(hFile, hoge, ...)とやると、インテルCPUはリトルエンディアンのため、2バイトごとにデータの上位バイトと下位バイトが入れ替わったままで、ファイルにデータが書き出されてしまうのだ。
書き出したデータをもう一度ReadFileで読めば元に戻るから問題ない、かというとそうでもない。

WriteFileで書き出したファイルを他のソフトで加工することができないのだ。
grepすることもできないし、ユニコード対応のテキストエディタで開くこともできない。
汎用性のないデータになってしまうのだ。

KageHinataのプログラミングにおいては、結局、データを全部UTF16からUTF8に変換することで、このあたりの処理をごまかしてしまったが、一応、備忘録としてここに記しておく。

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック