我已经阅读了所有jsoncpp文档here,我知道如何将jsoncpp用于char *和std :: string但是,我需要一种从json文件中获取wchar
数据的方法。我猜这可以使用json_reader.cpp中的decodeString
函数来完成。文档没有描述令牌是参数还是out参数,或者我应该如何获得该Token,因为它是[in]参数。我已经搜索了超过2天,我似乎找不到领先。
非常欢迎任何形式的建议或链接。
答案 0 :(得分:1)
Windows使用UTF16 UNICODE标准。应使用UNICODE设置设置新的Windows项目。
基于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);