2

この韓国語テキスト (quoted-printable) "2013-03-22 =0E?@HD=0F 05:30" は、MultiByteToWideChar によって Unicode に正しく変換されません。Quoted-printable form here は、このテキストをここに配置するためのものであり、実際の内容には 0xE および 0xF バイトが含まれます。

MultiByteToWideChar(50225, 0, bs.pData, bs.nSize, pData + nSize, nConvertedLen);

=0E?@HD=0F はそのまま変換され、結果の Unicode には 0xE および 0xF ASCII 文字が含まれます。ただし、これらの文字の代わりに韓国語の文字がいくつか表示されるはずであることがわかりました。国際文字シーケンスは 127 より大きいコードのバイトで始まるといつも思っていましたが、最近、そうではないことがわかりました。ただし、 MultiByteToWideChar はまだ私が行った方法を考えており、 0xE の処理を​​拒否していますか? @ HD 0xF は、50225 (または 949) コードページの非 ASCII 韓国語文字のカップルです。.NET 関数 (Encoding.GetEncoding(50255).GetString など) を使用して同じコンピューターで同じことを行うと、変換結果が正しく取得され、韓国語の文字が表示されます。ただし、MultiByteToWideChar は機能しません。MultiByteToWideChar (MB_COMPOSITE など) に設定できるさまざまなフラグを試しましたが、まだうまくいきません。

MultiByteToWideChar を正しく動作させるにはどうすればよいですか? 問題があれば、私は WinXP SP3 を使用しています。繰り返しますが、.NET の方法は正常に機能しており、内部的に Encoding.GetString が MultiByteToWideChar を呼び出しているようです。

4

2 に答える 2

0

MultiByteToWideCharを使用する代わりに、 IMultiLanguage::ConvertStringToUnicodeを使用することをお勧めします。これはMicrosoft によって提案され、文字を適切にデコードします。唯一の「欠点」は、MultiByteToWideChar が Windows 2000 で動作する Windows XP が必要なことです。大きな欠点 IMO ではありません。

IMul​​tiLanguageには、 IMultiLanguage::GetCharsetInfoIMultiLanguage::EnumCodePagesなど、エンコード変換を容易にする他のツールもあります。

于 2015-09-02T13:13:08.913 に答える