Как использовать 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);