写入数据到XML文件时出现UnicodeEncodeError

2 投票
1 回答
824 浏览
提问于 2025-04-15 22:32

我的目标是用一些标签写一个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 个回答

6

你应该先用 .decode 把收到的 cp1252 编码转换成 Unicode 字符串,然后在写入的时候用 .encode 转换成 utf-8(这是处理 XML 时最推荐的编码方式),也就是说:

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

这里的 unicodedata 是通过对收到的字节串使用 .decode('cp1252') 得到的。

你也可以使用 Python 标准库中的 codecs 模块来打开输入和输出文件,并为它们设置正确的编码,而不是直接用简单的 open,不过我展示的是底层的机制(而且直接使用这种方式通常会更清晰、更明确,而不是通过 codecs 间接使用——这主要是个人风格和喜好的问题)。

最重要的是一个基本原则:尽快把输入字符串转换成 Unicode,尽量在处理过程中一直使用 Unicode,最后在输出之前再把它们转换回字节串。这样做会让你的工作变得简单明了!-)

撰写回答