Python печатает символы Юникода вместо ASCII

#python #windows #shell

Вопрос:

Я хочу напечатать текст ASCII, но когда я запускаю скрипт, он выдает мне ошибку:

 $ python test.py Traceback (most recent call last): 
   File "C:UserswooxhDesktopMaterialyXRichPresencetest.py", 
       line 1, in <module> print(""" File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.9_3.9.2032.0_x64__qbz5n2kfra8p0libencodingscp1250.py", 
           line 19, in encode return codecs.charmap_encode(input,self.errors,encoding_table)[0] UnicodeEncodeError: 
   'charmap' codec can't encode characters in position 2-4: character maps to <undefined>
 

Вот код

 print("""
██╗  ██╗██████╗ ██████╗  ██████╗
╚██╗██╔╝██╔══██╗██╔══██╗██╔════╝
 ╚███╔╝ ██████╔╝██████╔╝██║     
 ██╔██╗ ██╔══██╗██╔═══╝ ██║     
██╔╝ ██╗██║  ██║██║     ╚██████╗
╚═╝  ╚═╝╚═╝  ╚═╝╚═╝      ╚═════╝
""")
 

Комментарии:

1. Удалите encode вызов.

2. Он печатается в кодировке, потому что вы его кодируете…

3. Кажется, работает, если вы удалите .encode("UTF-8") в конце.

4. @WooxHimself Тогда почему вы не включили обратную трассировку?

5. @WooxHimself: скорее всего, это потому, что ваш терминал не поддерживает UTF-8 (или, по крайней мере, Python не думает, что это так). Это проблема конфигурации, немного выходящая за рамки Python.

Ответ №1:

Похоже, Python идентифицирует вашу кодовую страницу как 1250, которая не включает символы, которые вы используете. Если chcp отчеты, в которых вы фактически используете кодовую страницу 437 (общий cmd.exe ), вы можете сделать:

 import sys

sys.stdout.buffer.write("""
██╗  ██╗██████╗ ██████╗  ██████╗
╚██╗██╔╝██╔══██╗██╔══██╗██╔════╝
 ╚███╔╝ ██████╔╝██████╔╝██║     
 ██╔██╗ ██╔══██╗██╔═══╝ ██║     
██╔╝ ██╗██║  ██║██║     ╚██████╗
╚═╝  ╚═╝╚═╝  ╚═╝╚═╝      ╚═════╝
""".encode('cp437'))
 

чтобы явно закодировать правильную кодовую страницу и записать ее. В противном случае я бы предложил включить принудительный режим выполнения Python в формате UTF-8, который должен позволять вашему исходному коду (без вызова encode ) работать (возможно, отбрасывая или заменяя символы, не представленные терминалом). Все, что вы изменили бы, это ваша команда run:

 > python -X utf8 test.py
 

или явно определите PYTHONUTF=1 в своей среде, чтобы включить его без переключателя командной строки.