Как использовать decodeString в jsoncpp для декодирования строки, содержащей символы Юникода

Я прочитал всю документацию jsoncpp здесь, и я знаю, как использовать jsoncpp для char * и std::string, но мне нужен способ получить wchar данные из моего файла JSON. Я предполагаю, что это можно сделать с помощью decodeString функция присутствует в json_reader.cpp. Документация не описывает, является ли токен параметром in или out или как именно я должен получить этот токен, учитывая, что это параметр [in]. Я искал более 2 дней, и я не могу найти лидерство.

Любые предложения или ссылки приветствуются.

1 ответ

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);

Преобразуйте его обратно в UTF8 перед отправкой в ​​JSON:

std::string str = get_utf8(ws);
set_JSON_string(str);
Другие вопросы по тегам