Неожиданный вывод std::wcout << L“élève”;в оболочке Windows

StackOverflow https://stackoverflow.com/questions/721357

  •  05-09-2019
  •  | 
  •  

Вопрос

При тестировании некоторых функций для преобразования строк между wchar_t и utf8 я столкнулся со следующим странным результатом с Visual C ++ express 2008

std::wcout << L"élève" << std::endl;

выводит "UlÞve:", что явно не то, что ожидается.

Очевидно, что это ошибка.Как это может быть ?Как я предполагаю справиться с такой "особенностью" ?

Это было полезно?

Решение

Компилятор C ++ не поддерживает Unicode в файлах кода.Вместо этого вы должны заменить эти символы их экранированными версиями.

Попробуй это:

std::wcout << L"\x00E9l\x00E8ve" << std::endl;

Кроме того, ваша консоль также должна поддерживать Unicode.

Обновить:

Это не приведет к желаемому результату в вашей консоли, поскольку консоль не поддерживает Unicode.

Другие советы

Возможно, вы также захотите взглянуть на этот вопрос.Это показывает, как на самом деле вы можете жестко закодировать символы юникода в файлы, используя некоторые компиляторы (я не уверен, какие опции будут у MSVC).

Очевидно, что это ошибка.Как это может быть?

В то время как другие операционные системы отказались от устаревших кодировок символов и перешли на UTF-8, Windows использует два устаревшие кодировки:Кодовая страница "OEM" (используется в командной строке) и кодовая страница "ANSI" (используется графическим интерфейсом).

Ваш исходный файл C ++ находится на кодовой странице ANSI 1252 (или, возможно, 1254, 1256 или 1258), но ваша консоль интерпретирует его как кодовую страницу OEM 850.

Ваша IDE и компилятор используют кодовую страницу ANSI.Консоль использует кодовую страницу OEM-производителя.

Также имеет значение, что вы делаете с этими функциями преобразования.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top