我有以下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)
我试图将一个字符'''设置为'name',但我有一个错误:
UnicodeDecodeError:'ascii'编解码器无法解码位置0中的字节0xb9:序数不在范围内(128)
如何解决这个问题?
您需要使用unicode值。例如,使用带有u''
的unicode文字:
rank.set('name', u'ą')
这导致:
<data>
<country name="Liechtenstein">
<neighbor direction="E" name="Ø" />
<neighbor direction="W" name="Ø" />
</country>
</data>
而是传递cp1250编码的字节,必须将其解码为Unicode,并使用默认的编解码器ASCII自动进行。这不起作用,因为你的bytestring包含十六进制值B9
(cp1250编码中的ą
)的字节,并且它不是有效的ASCII值。
您可能想要阅读Python和Unicode: