尝试过的代码段:
wchar_t txt = L"Hello world";
std::wstring ws(txt);
std::string str(ws.begin(), ws.end());
答案 0 :(得分:2)
std::string str(ws.begin(), ws.end())
只需按原样复制每个wchar_t
,将每个宽度缩小到char
,截去未使用的位。这不是您要执行的操作,因为它只能在不丢失ASCII字符的情况下工作。
您需要将来自UTF-16 / 32的wchar_t
数据(取决于编译器用于对wchar_t
数据进行编码的内容)转换为您想要的任何字符集{ {1}}来保存(ANSI / MBCS,UTF-8,ISO-8869-X等)。
C ++标准库对这些转换(std::wstring_convert
,std::wcstombs()
等)具有内置的 minimum 支持,因此您可能不得不求助于第三方Unicode库。 (ICONV,ICU等)或平台特定的API(std::string
等)。
由于您不仅要转换Unicode字符串,还要比较它们,因此使用第三方Unicode库可能是最好的选择。使用Unicode并非易事,因此请利用已经完成的辛勤工作。