我已经阅读了这里所有的jsoncpp文档,我知道如何使用jsoncpp来表示char *和std::string,但是,我需要一种方法从我的json文件中获取wchar
数据。我猜这可以使用json_reader.cpp中存在的decodeString
函数来完成。该文档没有描述令牌是 in 参数还是 out 参数,或者考虑到它是一个 [in] 参数,我应该如何获得该令牌。我已经搜索了 2 天多了,但我似乎找不到潜在客户。
非常欢迎任何形式的建议或链接。
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);