请参阅:
>>> import xml.etree.ElementTree as et
>>> xmlstring = """<?xml version="1.0" encoding="UTF-8"?>
... <dm><?xml version="1.0" encoding="UTF-8"?>
... <string>R\xc3\xa9sum\xc3\xa9</string>
... </dm>
... """
XML源是UTF-8编码的(\xc3\xa9
=é):
>>> print xmlstring
<?xml version="1.0" encoding="UTF-8"?>
<dm><?xml version="1.0" encoding="UTF-8"?>
<string>Résumé</string>
</dm>
现在,让我们解析一下:
>>> dm = et.fromstring(xmlstring)
>>> dm.text
u'<?xml version="1.0" encoding="UTF-8"?>\n <string>R\xe9sum\xe9</string>\n'
如您所见,\xc3\xa9
(utf-8)字符已转换为\xe9
(iso-8859-1)。
答案 0 :(得分:3)
这是正常的Python行为;您正在查看 unicode 字符串表示,可以将其粘贴回Python解释器而不会出现编码问题,因为任何非ASCII或不可打印的字节都表示为转义码。请注意,换行符也由其\n
转义码表示。
使用print dm.text
写出没有Python字符串文字表示的字节值:
>>> text = u'<?xml version="1.0" encoding="UTF-8"?>\n <string>R\xe9sum\xe9</string>\n'
>>> print text
<?xml version="1.0" encoding="UTF-8"?>
<string>Résumé</string>
代码点是 unicode 代码点,但由于它们低于U + 0100,Python使用\x..
转义代码表示它们。更高的代码点将使用\u....
转义码。在Unicode标准中,U + 0100以下的代码点与Latin 1标准匹配。
如果您预期使用UTF-8字节,则再次将Unicode值编码为UTF-8:
>>> text.encode('utf8')
'<?xml version="1.0" encoding="UTF-8"?>\n <string>R\xc3\xa9sum\xc3\xa9</string>\n'
答案 1 :(得分:-2)
如果你正在使用Python&lt;你有没有尝试过:# - - 编码:utf8 - - 否则Python将根据实现使用编码。