【问题标题】:unicode error printing \u2002 using Python 3使用 Python 3 打印 unicode 错误 \u2002
【发布时间】:2015-11-24 22:45:55
【问题描述】:

我在尝试打印文本块时收到 Python 无法解码字符 \u2002 的错误:

UnicodeEncodeError: 'charmap' codec can't encode character '\u2002' in position 355: character maps to <undefined>

我不明白的是,据我所知,这是一个 unicode 字符(即EN SPACE 字符),所以不知道为什么不打印。

供参考,内容使用file_content = open (file_name, encoding="utf8")读入

【问题讨论】:

    标签: python python-3.x unicode python-unicode


    【解决方案1】:

    为我工作! (在 linux 终端上)

    >>> 打印(“\u2002”)

    这是一个隐形的,因为它是 EN_SPACE

    如果您使用的是 Windows,但您可能会在终端中使用代码页 125X 并且...

    >>> "\u2002".encode("cp1250")        
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib/python3.4/encodings/cp1250.py", line 12, in encode
        return codecs.charmap_encode(input,errors,encoding_table)
    UnicodeEncodeError: 'charmap' codec can't encode character '\u2002' in position 0: character maps to <undefined>
    

    【讨论】:

    • 谢谢 - 也许这是一个“后续”问题,所以我很抱歉,但最简单的避免方法是什么 - 我刚刚从 Python 2 切换,并习惯使用 reload sys 并将编码设置为utf8 [刚刚假设 unicode 和 utf8 是相同的]
    • @kyrenia,这只是默认 Windows 终端的缺陷。您可以尝试更改默认代码页superuser.com/questions/269818/…
    • @JohnLaRooy windows 终端(命令窗口)不使用普通代码页,它使用旧代码页,例如cp437。您可以通过sys.stdout.encoding 看到 Python 使用的编码。
    • @kyrenia,重新加载系统技巧从来都不是一个好主意。见Why sys.setdefaultencoding() will break code。避免该错误的最简单方法是使用支持 UTF-8 输出的 IDE 而不是 Windows 控制台或尝试使用 win-unicode-console 包。
    【解决方案2】:

    在 Unicode 中使用该字符没有问题(在 Python 中作为 unicode 字符串)。但是当你把它写出来(“打印它”)时,它需要被编码成编码。某些编码不支持某些字符。您用于打印的编码不支持该特定字符。

    您可能正在使用 Windows 控制台,该控制台通常使用不包含此字符的代码页,例如 850 或 437。

    有一些方法可以更改 Windows 控制台代码页 (chcp),或者您可以在 Idle 或其他一些 IDE 中尝试

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-16
      • 2012-06-27
      • 2015-07-23
      • 1970-01-01
      • 2015-08-15
      • 1970-01-01
      • 2012-05-16
      • 2013-07-25
      相关资源
      最近更新 更多