【问题标题】:UnicodeEncodeError while writing data to an xml file将数据写入 xml 文件时出现 UnicodeEncodeError
【发布时间】:2010-05-10 04:51:58
【问题描述】:

我的目标是编写一个带有少量标签的 XML 文件,这些标签的值是区域语言。我正在使用 Python 来执行此操作,并使用 IDLE (Pythong GUI) 进行编程。

当我尝试在 xmls 文件中写入单词时,出现以下错误:

UnicodeEncodeError: 'ascii' 编解码器 无法在位置编码字符 0-4:序数不在范围内(128)

目前,我没有使用任何 xml 编写器库;相反,我正在打开一个文件“test.xml”并将数据写入其中。该行遇到此错误: f.write(data) 如果我用 print 语句替换上面的 write 语句,那么它会在 Python shell 上正确打印数据。

我正在从不是 UTF-8、16 或 32 编码格式的 Excel 文件中读取数据。它是其他格式。 cp1252 正在正确读取数据。

如果能帮助您将此数据写入 XML 文件,我们将不胜感激。

【问题讨论】:

    标签: python xml encoding


    【解决方案1】:

    你应该.decode你传入的cp1252来获取Unicode字符串,并在你写的时候.encode它们在utf-8(迄今为止XML的首选编码)中,即

    f.write(unicodedata.encode('utf-8'))
    

    其中unicodedata 是由.decode('cp1252') 在传入的字节串上获得的。

    可以使用标准 Python 库的 codecs 模块打开输入和输出文件,每个文件都有适当的编码来代替普通的 open,但我展示的是底层机制(尽管并非总是如此,直接应用它而不是通过codecs 间接应用它通常更清晰、更明确——风格和品味的问题)。

    重要的是一般原则:在获得输入字符串后尽快将其转换为 unicode,在整个处理过程中使用 unicode,最后将它们转换回字节字符串你可以在你输出它们之前。这给了你最简单、最直接的生活!-)

    【讨论】:

    • 感谢您的快速回复。 :) 我在收到错误时实际上做了同样的操作...文件“C:\test.py”,第 64 行,在 main uData = items.decode('cp1252') 文件“C:\Python26\lib \encodings\cp1252.py", line 15, in decode return codecs.charmap_decode(input,errors,decoding_table) UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128) I didn't不明白为什么会发生这种情况。 'cp1252' 可能不是用于解码的实际格式。在这种情况下我该怎么办? :(
    • 我们可以关闭这个帖子。我的问题解决了。实际上我拥有的数据已经是 unicode 数据。它不应该被解码。但是,为了写入 XML 文件,我使用了以下代码来解决我的问题。 import cgi dataToWrite = cgi.escape(data).encode("ascii", "xmlcharrefreplace") 非常感谢您的帮助。
    猜你喜欢
    • 2011-10-19
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    相关资源
    最近更新 更多