Перенаправление вывода Python в файл вызывает UnicodeEncodeError в Windows - PullRequest
0 голосов
/ 31 декабря 2018

Я пытаюсь перенаправить вывод скрипта python в файл.Когда вывод содержит символы не ascii, он работает в macOS и Linux, но не в Windows.

Я вывел проблему в простой тест.Ниже показано, что отображается в окне командной строки Windows.Тест - это всего лишь один вызов печати. ​​

Microsoft Windows [Version 10.0.17134.472]
(c) 2018 Microsoft Corporation. All rights reserved.

D:\>set PY
PYTHONIOENCODING=utf-8

D:\>type pipetest.py
print('\u0422\u0435\u0441\u0442')

D:\>python pipetest.py
Тест

D:\>python pipetest.py > test.txt

D:\>type test.txt
Тест

D:\>type test.txt | iconv -f utf-8 -t utf-8
Тест

D:\>set PYTHONIOENCODING=

D:\>python pipetest.py
Тест

D:\>python pipetest.py > test.txt
Traceback (most recent call last):
  File "pipetest.py", line 1, in <module>
    print('\u0422\u0435\u0441\u0442')
  File "C:\Python\Python37\lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-3: character maps to <undefined>

D:\>python -V
Python 3.7.2

Как видно, установка переменной среды PYTHONIOENCODING помогает, но я не понимаю, почему ее нужно было установить.Когда вывод является терминальным, он работает, но если вывод является файлом, он терпит неудачу.Почему cp1252 используется, когда стандартный вывод не является консолью?

Может быть, это ошибка, которую можно исправить в Windows-версии python?

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