我有这个unicodestring“ Param.tres”,è转换为未知字符。为什么?

时间:2019-02-01 14:11:48

标签: c++

尝试过的代码段:

wchar_t txt = L"Hello world";
std::wstring ws(txt);
std::string str(ws.begin(), ws.end());

1 个答案:

答案 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_convertstd::wcstombs()等)具有内置的 minimum 支持,因此您可能不得不求助于第三方Unicode库。 (ICONV,ICU等)或平台特定的API(std::string等)。

由于您不仅要转换Unicode字符串,还要比较它们,因此使用第三方Unicode库可能是最好的选择。使用Unicode并非易事,因此请利用已经完成的辛勤工作。