0

Unicode 変換の処理に少し問題があります。

次のコードは、これをテキスト ファイルに出力します。こんにちは??O

std::string test = "HELLO"; 
std::string output;
int len = WideCharToMultiByte(CP_OEMCP, 0, (LPCWSTR)test.c_str(), -1, NULL, 0, NULL, NULL);
char *buf = new char[len];
int len2 = WideCharToMultiByte(CP_OEMCP, 0, (LPCWSTR)test.c_str(), -1, buf, len, NULL, NULL);
output = buf;
std::wofstream outfile5("C:\\temp\\log11.txt");
outfile5 << test.c_str();
outfile5 << output.c_str();
outfile5.close();

しかし、ご覧のとおり、出力はテスト変数からの Unicode 変換にすぎません。これはどのように可能ですか?

4

2 に答える 2

1

最初の測定呼び出しの後、LEN が正しいかどうかを確認します。一般に、test.c_str() を LPCWSTR にキャストしないでください。'test' は 'wchar_t'-wstring ではなく 'char'-string です。LPCSTR にキャストできます。「W」がないことに注意してください。WinAPI はそれを区別します。ワイド文字を保持したい場合は、実際に使用する必要がありwstringます..ええ、コードを読み直した後test、 wstring である必要があり、安全に LPCWSTR にキャストできます。

于 2013-02-27T01:12:11.660 に答える
0

このMicrosoft wstring リファレンスを読んだ後

私が変更され

std::string test = "HELLO";

std::wstring test = L"HELLO";

そして、文字列が正しく出力され、取得しました

やあやあ

于 2013-02-27T01:10:22.677 に答える