C ++ Файловая кодировка символов

Итак, я пытаюсь прочитать текстовый файл в формате json с акцентами (французский) под W8, используя C ++ (Visual Studio 2012 Express).

Это файл:

    {"products": [{"id": 125, "label": "Billél"}, {"id": 4, "label": "Rùbin"}]}

Одна строка, закодированная в UTF-8 (без спецификации), сохраняется как D: /p.txt

Это код чтения в C ++:

    std::ifstream in("D:/p.txt", std::ios::binary | std::ios::in);
std::string content( (std::istreambuf_iterator<char>(in) ), (std::istreambuf_iterator<char>()    ) );

На выходе я получаю:

    {"products": [{"id": 125, "label": "Bill├®l"}, {"id": 4, "label": "R├╣bin"}]}

Пробовал с помощью CharToOemA :

   {"products": [{"id": 125, "label": "Billél"}, {"id": 4, "label": "Rùbin"}]}

Моя кодовая страница должна позволять мне отображать акценты в консоли (я попытался повторить такие акценты, которые дали совершенно хороший дисплей). Кодовые страницы ввода и вывода для моей консоли c ++ — CP850 (IBM Internatinal Latin-1).

Как я могу получить мой код для вывода правильного акцента в консоли? В конечном итоге мне понадобится кроссплатформенное решение, если это возможно.

2

Решение

Если у вас UTF-8, и вы выводите в окно, ожидающее ISO 8859-1,
это не сработает. Если у вас есть UTF-8 (который будет
случай, если глобальная локаль по-прежнему по умолчанию "C"), затем вы
можно либо изменить окно на кодовую страницу 65001, либо вы должны
преобразовать кодировку перед выводом.

Что касается портативности, нет никакого реального решения; что ты
нужно сделать, зависит от того, как назначение интерпретирует байты
вы выводите. Под Windows вы можете изменить кодовую страницу; под
Unix системы (X Windows), это кодировка шрифта
Окно использует, что имеет значение. В обоих случаях они могут быть разными
для разных окон на одной машине.

0

Другие решения

Вы пытались использовать chcp 65001 который должен переключить кодовую страницу в UTF-8, в соответствии с MSDN. Также обратите внимание, что шрифт консоли по умолчанию может не отображать все символы UTF8, я рекомендую использовать Lucida Console вместо.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector