Проблема
Проблема возникает, когда я хочу ввода символа Unicode в интерпретатор Python (для простоты я использовал-умляут в примере, но я первый столкнулся с этим для символов фарси). Всякий раз, когда я использую python с кодовой страницей chcp 65001
, а затем пытаюсь ввести хотя бы один символ Unicode, Python выходит без ошибок.CHCP 65001 результаты кодовой страницы в завершение программы без каких-либо ошибок
Я провел дни, пытаясь решить эту проблему безрезультатно. Но сегодня я нашел поток на python website, другой на MySQL и еще один на Lua-пользователях, которые подняли вопросы относительно этого внезапного выхода, хотя без какого-либо решения, а некоторые говорят, что chcp 65001
по своей сути сломан.
Было бы полезно знать раз и навсегда, является ли эта проблема связанной с chcp-дизайном или существует возможное обходное решение.
ВОПРОИЗВЕДЕНИЕ Ошибка
chcp 65001
Python 3.X:
Python оболочки
print('ä')
результат: он просто выходит из оболочки
однако, это работает python.exe -c "print('ä')"
и также это: print('\u00e4')
Результат:
в Luajit2.0.4
print('ä')
результат: он просто выходит из оболочки
однако это работает: print('\xc3\xa4')
Я пришел с этим наблюдением до сих пор:
- прямого вывода с командной строкой работ.
- Основанный на Unicode эквивалент символа на основе шестнадцатеричных символов.
Так Это не ошибка Python и, что мы не можем использовать символ Unicode непосредственно в программах CLI в командной строке Windows, или любой из его обертке как Conemu, Cmder (я использую Cmder чтобы видеть и использовать символ Unicode в оболочке Windows, и я сделал это без каких-либо проблем). Это верно?
У меня есть несколько версий Python. Я не мог воспроизвести на Windows 10 64-битный, с Python 3.3.5 64-битным или Python 3.5.2 64-разрядным, но мог бы с Python 2.7.12 32-бит. Он выходит, как описано, но вы сказали, что используете Python 3. Возможно, это 32-битная проблема с 64-разрядной версией? Вы используете консоль cmd.exe Windows или что-то еще? –
@MarkTolonen, это воспроизводится во всех версиях Windows при использовании консоли (conhost; cmd - это просто оболочка), которая не была предназначена для кодовой страницы 65001. Ввод одного символа, отличного от ASCII, вызывает пустое чтение, которое REPL Python и 'input' обрабатывается как EOF. Проблема заключается в том, что conhost.exe предполагает, что он кодирует свой входной буфер UTF-16 кодовой странице ANSI с 1 байтом на символ, поэтому для не-ASCII UTF-8 буфер кодировки 'WideCharToMultiByte' слишком мал. Чтение не выполняется, но оно возвращается клиенту как «успешное» чтение 0 байт, т. Е. Конец файла. – eryksun
@eryksun, Да, я знаю, что он сломан, но все же, на 64-битном Python на 64-битной Windows 10, я могу напечатать на cmd.exe 'print ('ä')' с международным IME и распечатать правильно. Поэтому версия «воспроизводимая во всех Windows» является неточной, по крайней мере для этого конкретного примера. –