0

我有以下 XML:

newX.xml

<?xml version="1.0" encoding="UTF-8"?>
<data>
    <country name="Liechtenstein">
    <neighbor name="Austriaą" direction="E"/>
    <neighbor name="a" direction="W"/>
</country>
</data>

Python脚本:

# -*- coding: cp1250 -*-
import xml.etree.ElementTree as ET
xml = 'c://newX.xml'

tree = ET.parse(xml)
root = tree.getroot()
for rank in root.iter('neighbor'):
   rank.set('name', 'ą')
ET.dump(root)

我正在尝试将字符“±”设置为“名称”,但出现错误:

UnicodeDecodeError:“ascii”编解码器无法解码位置 0 的字节 0xb9:序数不在范围内(128)

如何解决这个问题?

4

1 回答 1

4

您需要使用 unicode 值。使用 unicode 文字,u''例如:

rank.set('name', u'ą')

这导致:

<data>
    <country name="Liechtenstein">
    <neighbor direction="E" name="&#216;" />
    <neighbor direction="W" name="&#216;" />
</country>
</data>

相反,您传递的是 cp1250 编码的字节,这些字节必须被解码为 Unicode,并且使用默认编解码器 ASCII 会自动发生这种情况。这不起作用,因为您的字节串包含具有十六进制值的字节B9ą在 cp1250 编码中),这不是有效的 ASCII 值。

你可能想阅读 Python 和 Unicode:

于 2013-04-25T17:30:12.017 回答