写入数据到XML文件时出现UnicodeEncodeError
我的目标是用一些标签写一个XML文件,这些标签的值是用地方语言写的。我正在用Python来实现这个,并且使用IDLE(Python的图形界面)来编程。
当我尝试把这些文字写入XML文件时,出现了以下错误:
UnicodeEncodeError: 'ascii' 编码 无法编码位置 0-4的字符:序号不在范围(128)内
目前,我没有使用任何XML写入库,而是直接打开一个名为“test.xml”的文件,把数据写进去。这个错误出现在这一行代码:
f.write(data)
如果我把上面的写入语句换成打印语句,那么数据就能在Python的命令行中正常显示。
我从一个Excel文件中读取数据,这个文件的编码格式不是UTF-8、UTF-16或UTF-32,而是其他格式。cp1252编码能够正确读取这些数据。
如果有人能帮我把这些数据写入XML文件,我将非常感激。
1 个回答
你应该先用 .decode
把收到的 cp1252
编码转换成 Unicode 字符串,然后在写入的时候用 .encode
转换成 utf-8
(这是处理 XML 时最推荐的编码方式),也就是说:
f.write(unicodedata.encode('utf-8'))
这里的 unicodedata
是通过对收到的字节串使用 .decode('cp1252')
得到的。
你也可以使用 Python 标准库中的 codecs
模块来打开输入和输出文件,并为它们设置正确的编码,而不是直接用简单的 open
,不过我展示的是底层的机制(而且直接使用这种方式通常会更清晰、更明确,而不是通过 codecs
间接使用——这主要是个人风格和喜好的问题)。
最重要的是一个基本原则:尽快把输入字符串转换成 Unicode,尽量在处理过程中一直使用 Unicode,最后在输出之前再把它们转换回字节串。这样做会让你的工作变得简单明了!-)