【问题标题】:Running into an issue printing asccii-art shadow character遇到打印 ascii-art 阴影字符的问题
【发布时间】:2021-11-19 23:44:18
【问题描述】:

我写了一个程序来做一个特定的目的。当我运行程序时,我有一个 ASCII 艺术横幅,它写入一个 txt 文档,然后是程序生成的一些解析数据。程序在没有特定字符的情况下运行良好,但是当我尝试将“█”写入文本文件时,我收到以下错误。

文件“REDACT.py”,REDACT 行,在 报告.write('█') 文件“C:\Users\REDACT\AppData\Local\Programs\Python\Python38-32\lib\encodings\cp1252.py”,第 19 行,编码 返回 codecs.charmap_encode(input,self.errors,encoding_table)[0] UnicodeEncodeError:“charmap”编解码器无法对位置 0-6 中的字符进行编码:字符映射到

记事本似乎可以很好地显示和打印字符,但是python中的某些编码无法识别该字符。任何帮助将非常感激。提前谢谢你。

【问题讨论】:

  • 当您在没有指定编码的情况下打开一个文本文件进行写入时,Python 会选择一些与平台相关的默认值,在您的情况下显然是 CP-1252(«Windows Latin-1»)。该编解码器不支持您要编写的字符。如果您想控制输出编码,请在open 调用中指定它:open(..., encoding=CODEC)CODEC 的一个不错的选择通常是 "utf8",但如果你使用记事本,我会选择 "utf-8-sig"
  • edit 分享您的问题minimal reproducible example

标签: python python-3.x unicode character-encoding unicode-string


【解决方案1】:

美国和西欧 Windows 版本的默认字符编码为 Windows-1252(也称为 cp1252),并且仅支持整个 Unicode 字符范围的一小部分。请改用 UTF 编码,例如 utf8

示例(请务必使用 UTF-8 编码保存源文件):

with open('banner.txt','w',encoding='utf8') as f:
    print('''\
╔═════════════════════════════════════╗
║ ████    █   █   █ █   █ █████ ████  ║
║ █   █  █ █  ██  █ ██  █ █     █   █ ║
║ ████  █████ █ █ █ █ █ █ ███   █████ ║
║ █   █ █   █ █  ██ █  ██ █     █  █  ║
║ ████  █   █ █   █ █   █ █████ █   █ ║
╚═════════════════════════════════════╝''',file=f)

banner.txt。从控制台,使用chcp 65001 显示UTF-8 文本文件,但记事本和记事本++ 也会正确显示。如果编辑有问题,请使用utf-8-sig。有些人希望文件开头有一个 UTF-8 编码的 BOM(字节顺序标记)字符,或者默认使用本地化编码,如 cp1252

C:\>chcp 65001
Active code page: 65001

C:\type banner.txt
╔═════════════════════════════════════╗
║ ████    █   █   █ █   █ █████ ████  ║
║ █   █  █ █  ██  █ ██  █ █     █   █ ║
║ ████  █████ █ █ █ █ █ █ ███   █████ ║
║ █   █ █   █ █  ██ █  ██ █     █  █  ║
║ ████  █   █ █   █ █   █ █████ █   █ ║
╚═════════════════════════════════════╝

【讨论】:

    猜你喜欢
    • 2016-06-25
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 2022-12-20
    • 1970-01-01
    相关资源
    最近更新 更多