2013-06-17 2 views
2

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

Это файл:

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

Одна линия, закодированные в UTF-8 (без BOM), сохраняется как 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).

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

+0

Вы не можете отобразить эту информацию правильно, пока не будете * читать * ее правильно, вас еще нет. Чтение utf-8 с iostream - это ракетостроение, которое хорошо освещено во многих вопросах. Введите «codecvt» в поле поиска. –

ответ

0

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

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

0

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

Смежные вопросы