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



我已经阅读了这里所有的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::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);

最新更新