【问题标题】:Python printing unicode characters instead of ASCIIPython打印unicode字符而不是ASCII
【发布时间】:2021-12-17 03:41:28
【问题描述】:

我想打印一个 ASCII 文本,但是当我运行脚本时,它会抛出一个错误:

$ python test.py Traceback (most recent call last): 
   File "C:\Users\wooxh\Desktop\Materialy\XRichPresence\test.py", 
       line 1, in <module> print(""" File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.2032.0_x64__qbz5n2kfra8p0\lib\encodings\cp1250.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("""
██╗  ██╗██████╗ ██████╗  ██████╗
╚██╗██╔╝██╔══██╗██╔══██╗██╔════╝
 ╚███╔╝ ██████╔╝██████╔╝██║     
 ██╔██╗ ██╔══██╗██╔═══╝ ██║     
██╔╝ ██╗██║  ██║██║     ╚██████╗
╚═╝  ╚═╝╚═╝  ╚═╝╚═╝      ╚═════╝
""")

【问题讨论】:

  • 删除encode 调用。
  • 它正在打印,因为您正在对其进行编码...
  • 如果您在最后删除 .encode("UTF-8") 似乎可以工作。
  • @WooxHimself 那你为什么不包括回溯?
  • @WooxHimself:很可能是因为您的终端不支持 UTF-8(或者至少 Python 认为不支持)。这是 Python 之外的一个配置问题。

标签: python windows shell


【解决方案1】:

看起来 Python 将您的代码页标识为 1250,其中不包括您正在使用的字符。如果chcp 报告您实际上正在使用代码页 437(常见于 cmd.exe),您可以这样做:

import sys

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

显式编码为正确的代码页并编写它。否则,我建议启用 Python 的 forced UTF-8 runtime mode,它应该允许您的原始代码(无需调用 encode)工作(可能删除或替换终端无法表示的字符)。您只需要更改运行命令:

> python -X utf8 test.py

或在您的环境中明确定义PYTHONUTF=1 以在没有命令行开关的情况下打开它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 2011-08-04
    • 2016-12-29
    相关资源
    最近更新 更多