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' 是 'char'-string 而不是 'wchar_t'-wstring。您可以将其转换为 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 回答