Русский язык в JSON

1203
05 февраля 2017, 12:51

Вычитал из этой статьи, что есть парсер JSON. Удобный парсер, но при вводе значений на русском языке выводится ошибка.

Возникло необработанное исключение по адресу 0x753BB760

Вот пример кода:

nlohmann::json response_json;
auto response_json = nlohmann::json::parse("{ \"Пример\": [\"Нуль\"] }");

Вот этот код рабочий:

nlohmann::json response_json;
auto response_json = nlohmann::json::parse("{ \"Value\": [\"NULL\"] }");

Никто не в курсе как изменить данную ситуацию? Поправить может что-то, чтобы оно работало.

Answer 1

Убедитесь, что сохраняете файл с исходным кодом в кодировке UTF-8. Или настройте компилятор подходящим образом. Вероятно, самым простым способом будет просто указать префикс u8 перед строкой с JSON.

N.B.: Ваша библиотека поддерживает только эту кодировку.

P.S.: Возможно, вам будет удобно использовать сырые С++ строки. Подробнее можно прочитать, например, на MSDN.

Ваш пример у меня отлично работает:

using namespace nlohmann;
json ex = json::parse(u8R"({ "Пример": [ "Нуль" ] })");
for (json::iterator it = ex.begin(); it != ex.end(); ++it) {
    std::cout << it.key() << ": " << it.value() << "\n";
}
Answer 2

utf-8 символы нужно экранировать:

{"\u041f\u0440\u0438\u0432\u0435\u0442":1}

Что в строковом литерале c++ превратится в:

"{\"\\u041f\\u0440\\u0438\\u0432\\u0435\\u0442\":1}"

Хотя некоторые парсеры умеют парсить сырой utf-8 в JSON, стандарт этого не позволяет.

READ ALSO
Как реализовать данный запрос

Как реализовать данный запрос

На въюхе у меня должно быть два цикла: один выводит все категории, второй, который находится внутри первого, выводит все бренды данной категорииПример:

477
Запись в массивы

Запись в массивы

Народ подскажите решениеЕсть пользователь который с консоли вводит числа эти числа переводятся в другую систему координат и их надо записать...

521
Как подключить fxml файл к коду javafx?

Как подключить fxml файл к коду javafx?

Здравствуйте, что-то совсем запутался с fxmlУ меня есть два Java-класса

635