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