【问题标题】:ElementTree and UnicodeEncodeError: [duplicate]ElementTree 和 UnicodeEncodeError:[重复]
【发布时间】:2014-02-02 09:20:54
【问题描述】:

我正在处理以下 xml 文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<tag>…</tag>

就像 python 文档说的:

import xml.etree.cElementTree as ET

tree = ET.parse('file.xml')
print(tree.getroot().text)

但不幸的是我遇到了这样的错误:

Traceback (most recent call last):
  File "main.py", line 48, in <module>
    print(tree.getroot().text)
  File "C:\Python33\lib\encodings\cp852.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u2026' in position 0: character maps to <undefined>

我做错了什么?

【问题讨论】:

  • 您的控制台编解码器无法处理水平省略号字符。 Elementtree 做得很好,并将 XML 内容解码为 Unicode 值。 print() 但是需要再次编码字符以匹配您的控制台编码,并且您的 Windows 代码页无法处理此特定字符。

标签: python python-3.x unicode elementtree


【解决方案1】:

不打印值。处理它(您更有可能要做的事情)会正常工作。

如果您真的想打印它,首先将 unicode 字符串转换为您的输出媒体可以处理的内容(例如 UTF-8 编码字符串)。如果里面有奇怪的字符,你可以用它来转换至少其余的:

byteString = value.encode(sys.stdout.encoding, 'ignore')
originalWithoutTrouble = byteString.decode(sys.stdout.encoding)
print(originalWithoutTrouble)

当然,有些字符可能会丢失(在这种情况下,省略号 ,正如 Martijn 指出的那样)。

【讨论】:

    猜你喜欢
    • 2016-06-16
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 2015-03-31
    • 2020-04-24
    • 2016-08-03
    相关资源
    最近更新 更多