Итак, я пытаюсь прочитать текстовый файл в формате 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).
Как я могу получить мой код для вывода правильного акцента в консоли? В конечном итоге мне понадобится кроссплатформенное решение, если это возможно.
Если у вас UTF-8, и вы выводите в окно, ожидающее ISO 8859-1,
это не сработает. Если у вас есть UTF-8 (который будет
случай, если глобальная локаль по-прежнему по умолчанию "C"
), затем вы
можно либо изменить окно на кодовую страницу 65001, либо вы должны
преобразовать кодировку перед выводом.
Что касается портативности, нет никакого реального решения; что ты
нужно сделать, зависит от того, как назначение интерпретирует байты
вы выводите. Под Windows вы можете изменить кодовую страницу; под
Unix системы (X Windows), это кодировка шрифта
Окно использует, что имеет значение. В обоих случаях они могут быть разными
для разных окон на одной машине.
Вы пытались использовать chcp 65001
который должен переключить кодовую страницу в UTF-8, в соответствии с MSDN. Также обратите внимание, что шрифт консоли по умолчанию может не отображать все символы UTF8, я рекомендую использовать Lucida Console
вместо.