Windows使用UTF16 UNICODE标准。新的Windows项目应该使用UNICODE设置进行设置。
基于Linux和互联网的网络系统使用UTF8标准。
您通过json接收数据,它可能是UTF8,可用std::string
或const wchar
。将其转换为UTF16。使用:
std::string get_utf8(const std::wstring &wstr)
{
if (wstr.empty()) return std::string();
int sz = WideCharToMultiByte(CP_UTF8, 0, &wstr[0], (int)wstr.size(), 0, 0, 0, 0);
std::string res(sz, 0);
WideCharToMultiByte(CP_UTF8, 0, &wstr[0], (int)wstr.size(), &res[0], sz, 0, 0);
return res;
}
std::wstring get_utf16(const std::string &str)
{
if (str.empty()) return std::wstring();
int sz = MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), 0, 0);
std::wstring res(sz, 0);
MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), &res[0], sz);
return res;
}
例如,
std::string fromJSON = getjson(...);
std::wstring ws = get_utf16(fromJSON);
现在Windows可以显示ws
MessageBox(0, ws.c_str(), 0, 0);
其发送到JSON之前将其转换回UTF8:
std::string str = get_utf8(ws);
set_JSON_string(str);
是什么'wchar'中的点?如果它是一些api要求,那么api应该有某种[convert_from_utf8](https://doc.qt.io/qt-4.8/qstring.html#fromUtf8)[function](https://msdn.microsoft .COM/EN-US /库/窗/桌面/ dd319072(v = vs.85)的.aspx)。 – deniss
我需要从json文件读取德文文本并将其转换为.dat文件。但是文字会写成:wuetend,实际上应该是wütend。因此,我需要wchar。 –
utf8中的'ü'是一个字节序列'C3 BC'。所以它编码为ascii时是''''。你如何阅读.dat文件?我想你的查看器使用ascii编码,这在处理unicode时不是一个好主意。 – deniss