#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
в своей среде, чтобы включить его без переключателя командной строки.