【问题标题】:Replacing unencodable characters替换不可编码的字符
【发布时间】:2020-10-06 16:37:27
【问题描述】:

我目前正在做一些事情,我需要从网站上提取一些 .xml 并使用它。

一切正常,但如果我尝试打印.xml(或解析后的文本)并且.xml 中有一些无法编码的字符,我会收到该错误:

return codecs.charmap_encode(input,self.errors,encoding_table)
[0]UnicodeEncodeError: 'charmap' codec can't encode character '\u2665' in position 1161: character maps to <undefined>

现在我想找到这些字符并将它们替换为“?”例如。

我该怎么做?

有没有更好的方法来处理这些错误?

【问题讨论】:

  • 这是完整的错误堆栈吗?你是直接用自己的代码调用codecs.charmap_encode吗?
  • 您是否正在使用 Python 2?这是 Python 3 带来显着缓解的领域之一。
  • 更好的方法是配置您的 Python,以便它可以输出完整的 Unicode 范围。我知道这在 Windows 上更具挑战性,但这是离开 Windows 的另一个原因。

标签: python string unicode decode encode


【解决方案1】:

如果您编写了生成该错误的代码,那么对您的帮助会更容易,无论如何,通常您可以在utf8 中对字符串进行编码,然后进行解码:

data = '\u2665'
data = data.encode('utf8')
print(data)  # b'\xe2\x99\xa5'
data_d = data.decode('utf8')
print(data_d)  # ♥

此外,您可以在脚本的开头添加这一行:

# -*- coding: utf-8 -*-

然后验证stdout.encoding

import sys
print(sys.stdout.encoding)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-28
    • 2014-02-02
    • 2016-02-28
    • 2017-10-14
    • 1970-01-01
    • 2023-04-04
    • 2016-04-13
    • 1970-01-01
    相关资源
    最近更新 更多