代码之家  ›  专栏  ›  技术社区  ›  drevicko

使用ElementTree编写带有utf-8数据的xml utf-8文件。。。再一次

  •  0
  • drevicko  · 技术社区  · 12 年前

    这个问题的标题与 this one ,但我的问题不同。

    我使用tarfile.tarfile.textractfile()从tar.gz档案中读取了数据,并将其存储在xml.etree.ElementTree.Element中。数据是utf-8编码的。

    当我尝试使用xml.etree.ElementTree.ElementTree.write()将其放入文件中时,我得到的是:

    Traceback (most recent call last):
      File "../python/GetDoc.py", line 150, in <module>
        ET.ElementTree(elements).write(args.outfile, encoding="us-ascii", method="text")
      File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 815, in write
        _serialize_text(write, self._root, encoding)
      File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1007, in _serialize_text
        write(part.encode(encoding))
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 10: ordinal not in range(128)
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   BrenBarn    12 年前

    你是如何从文件中读取数据的?您是否正确地将其从UTF-8解码为unicode对象?ElementTree将需要unicode对象,而不是UTF-8编码的字节串。

        2
  •  0
  •   drevicko    12 年前

    在将字符串添加到ElementTree.Element对象之前,我使用myString.decode('utf-8')将字符串转换为unicode,从而解决了这个问题。看来ET.ElementTree.write()对其他字符串编码不满意。