« Windows 2000でWideCharToMultiByte関数を使うと、ISO-2022-JPのバイト数を間違う | メイン | C++Builder 2010のIndyでメール送信について »

Windows XPでWideCharToMultiByte関数を使い、ISO-2022-JPに変換するときの注意点

前回の記事「Windows 2000でWideCharToMultiByte関数を使うと、ISO-2022-JPのバイト数を間違う」では、 Windows 2000におけるWideCharToMultiByte関数の問題を調べました。

今回はWideCharToMultiByte関数のWindows XPでの問題です。

次のようにユニコード文字列をISO-2022-JPに変換した場合、

AnsiStringT<50220> jis = L"abcあいう";

Windows XPでは変数jisのバイトコードは「abc<ESC>あいう」のようになります。
<ESC>はエスケープシーケンスを表しています。
なお、Windows 7では「abc<ESC>あいう<ESC>」のようになります。
※UnicodeStringからAnsiStringTへの変換は、内部でWideCharToMultiByte関数を使用しています。

これが問題になるのは次のようなコードの時です。

AnsiStringT<50220> jis = L"abcあいう";
AnsiStringT<50220> jis2 = jis + jis;

Windows XPでは変数jis2のバイトコードは「abc<ESC>あいうabc<ESC>あいう」のようになってしまいます。
「あいうabc」の間に<ESC>がないため、文字化けが発生します。

なお、Windows 7では「abc<ESC>あいう<ESC>abc<ESC>あいう<ESC>」となり問題は発生しません。

Windows XPでも、WideCharToMultiByte関数を使ってISO-2022-JPに変換するときには注意が必要です。

今回のコードは、C++Builder2010で確認しました。

トラックバック

このエントリーのトラックバックURL:
http://www.gesource.jp/mt/mt-tb.cgi/1066

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2009年09月16日 18:53に投稿されたエントリーのページです。

ひとつ前の投稿は「Windows 2000でWideCharToMultiByte関数を使うと、ISO-2022-JPのバイト数を間違う」です。

次の投稿は「C++Builder 2010のIndyでメール送信について」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.35