различия в Python 3,5 против 3,6 при печати () Unicode Charcters? - PullRequest
0 голосов
/ 12 октября 2018

Мой файл Python:

print('Amanhã')

Я использую встроенный терминал в VSCode 1.28.1 в Windows 10 Pro.

Когда я активирую виртуальную среду на основе Python 3.6, тогдаЗапустите этот сценарий, он выполняется должным образом, и я вижу Amanhã в терминале.

Но когда я активирую виртуальную среду на основе Python 3.5, а затем запускаю этот сценарий, он завершается с ошибкой UnicodeEncodeError: UnicodeEncodeError: 'charmap' codec can't encode character '\xe3' in position 5: character maps to <undefined>

Если я запускаю set PYTHONIOENCODING=utf8 в среде на основе 3.5, затем выполняю сценарий, ошибка Юникода исчезает, но вывод не совсем такой, как ожидалось: Amanh├ú

Как я могу увидетьAmanhã в venv на основе 3.5?

(я повторил это в обычном терминале Windows (cmd.exe), а не в VSCode - точно такой же результат. Я также отмечу, что sys.getdefaultencoding() возвращает utf-8 как до, так и после команды set PYTHONIOENCODING=utf8)

1 Ответ

0 голосов
/ 12 октября 2018

Исходя из неверного вывода, ваш терминал использует cp437, который не поддерживает символ ã.

До Python 3.6, Python кодирует Unicode в кодировку терминала в Windows,Начиная с Python 3.6, Python использует API Unicode Win32 при записи в терминал и, как вы обнаружили, работает намного лучше.

Если вам нужно использовать Python 3.5, посмотрите win-unicode-console .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...