如何在jsoncpp中使用decodeString来解码包含unicode字符的字符串

时间:2016-03-02 11:04:59

标签: c++ string unicode jsoncpp

我已经阅读了所有jsoncpp文档here,我知道如何将jsoncpp用于char *和std :: string但是,我需要一种从json文件中获取wchar数据的方法。我猜这可以使用json_reader.cpp中的decodeString函数来完成。文档没有描述令牌是参数还是out参数,或者我应该如何获得该Token,因为它是[in]参数。我已经搜索了超过2天,我似乎找不到领先。

非常欢迎任何形式的建议或链接。

1 个答案:

答案 0 :(得分:1)

Windows使用UTF16 UNICODE标准。应使用UNICODE设置设置新的Windows项目。

基于Linux和互联网的系统使用UTF8标准。

您通过json接收数据,它可能是UTF8,可用std::stringconst 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);