Вывод команды не работает после изменения кодовой страницы

321
Ricardo Zorio

Я обнаружил довольно странную проблему при исследовании запутанного мира кодирования символов. В Windows, если я наберу «дерево», команда будет работать, как и ожидалось, но если я потом наберу «chcp 65001» (который является UTF-8), а затем снова «дерево», то оно сломается.

т.е.

> tree > chcp 65001 > tree 

enter image description here

Это в Windows 7, vanilla cmd, испанский язык. Кроме того, при перенаправлении вывода в файл его содержимое остается одинаковым до и после chcp (полный «ÀÄÄÄa»).

Некоторые исследования показали, что кодировка OEM-850.

Я знаю, что это выглядит лишним вопросом, но при компиляции программ (в основном с gcc) у меня та же проблема.

enter image description here

Переключатели / A и / U для cmd тоже не помогли.

enter image description here

1

1 ответ на вопрос

0
harrymc

Эта проблема с вводом не-ASCII воспроизводится в консоли для всех версий Windows вплоть до Windows 10. Включая процесс хоста консоли, т. Е. conhost.exeНе был разработан для UTF-8 (кодовая страница 65001) и не был обновлен для поддержки это последовательно.

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

Параметр / U cmd.exeтакже не используется, поскольку он работает только для внутренних команд. Вы можете получить лучшие результаты от некоторых приложений, направляя вывод команды в файл, но файл не будет иметь метки порядка байтов UTF-8 (BOM) .

Короче говоря, не ожидайте многого от, chcp 65001и вы не будете разочарованы. Единственная версия Unicode, которая хорошо работает в Windows, - это 16-битный Unicode.

Похожие вопросы