【发布时间】:2017-04-08 06:20:17
【问题描述】:
我正在做一个 win32 应用程序,并且有一个接受 unicode 文本输入的编辑控件。我使用以下代码将文本发送到std::string:
WCHAR out[50] = {};
GetDlgItemTextW(hwnd, ID_Edit, out, 50);
wstring myWString(out);
string myString(ws.begin(), ws.end());
在 dubugger 中,我可以看到 myWString 在输入为 unicode 文本时很好,但 myString 已损坏。
如何正确转换?
编辑:
好吧,与其愚弄string,我改用wstring。
但是又出现了一个问题:
我有另一个代码使用string、cout 和cin 在控制台中获取用户输入,现在wstring、wcin 和wcout 破坏了非ASCII 文本输入和输出部分...
我的代码是:
string myString;
//...
cin >> myString;
//...
cout << myString;
改为:
wstring myString;
//...
wcin >> myString;
//...
wcout << myString;
如果用户使用非 ASCII 字符,输入和输出文本会损坏。
【问题讨论】:
-
你为什么要首先转换?如果您需要使用国际化的非 ASCII 文本,请使用
wstring。 -
你可以使用 WideCharToMultiByte API
-
这个问题太宽泛了,不知道源编码和目的编码。
-
@MrEricSir:由于来自GetDlgItemTextW,源编码为UTF16。但是目标编码很重要。