Python 2.7 使用python utf-8编码显示特殊字符

Python 2.7 使用python utf-8编码显示特殊字符,python-2.7,utf-8,Python 2.7,Utf 8,我有几个utf-8编码的XML文件。这些文件使用不同的语言。我需要解析这些文件(我使用的是elementTree方法),然后从每个文件中获取一个特定的文本,然后拆分该文本。当我试图用内部有特殊字符的语言进行解析时,问题就出现了(除了英语,其他语言都很匹配)。我需要xml文件中显示的EXACT文本,而不是python的编码版本,以便分离工作,并从我正在解析的长文本中获取所需的数据。 我已经阅读了如何在python中编码utf-8,特别是我从官方python文档中看到了这一点 If the code

我有几个utf-8编码的XML文件。这些文件使用不同的语言。我需要解析这些文件(我使用的是elementTree方法),然后从每个文件中获取一个特定的文本,然后拆分该文本。当我试图用内部有特殊字符的语言进行解析时,问题就出现了(除了英语,其他语言都很匹配)。我需要xml文件中显示的EXACT文本,而不是python的编码版本,以便分离工作,并从我正在解析的长文本中获取所需的数据。 我已经阅读了如何在python中编码utf-8,特别是我从官方python文档中看到了这一点

If the code point is < 128, it’s represented by the corresponding byte value.
If the code point is >= 128, it’s turned into a sequence of two, three, or four bytes, where each byte of the sequence is between 128 and 255.
印刷品目前在那里只是为了我的方便,我想做的工作不需要它。 为了给您一个更具体的示例,xml文件中文本的一部分如下: 埃廷格大街

在将schild转换为string之后,我得到的是: 埃廷格大街


有没有办法从解析中提取要显示的特殊字符?

ElementTree处理Unicode,您也应该这样做
et.tostring
返回一个字节字符串。将其打印到不支持UTF-8的终端将得到该垃圾字符串。只需通过
打印child.text
输入Unicode字符串即可。您仍然需要有一个在当前编码中支持Unicode字符的终端

我在Windows上,控制台默认支持包含大多数西欧语言字符的
cp437
。请注意,直接打印元素文本可以:

>>> import xml.etree.ElementTree as et
>>> test = et.Element('test')
>>> test.text = u'Héllo'
>>> print(et.tostring(test,encoding='utf8'))
<?xml version='1.0' encoding='utf8'?>
<test>Héllo</test>
>>> print test.text
Héllo
>将xml.etree.ElementTree作为et导入
>>>test=et.Element(‘test’)
>>>test.text=u'Héllo'
>>>打印(et.tostring(测试,编码='utf8'))
H├⌐洛
>>>打印测试文本
海洛
Python将Unicode字符串编码为终端编码(不是UTF8)。如果您打印终端不支持的字符(如中文),您将得到一个
unicodeincodeerror
。如果遇到这种情况,解决方法是使用支持UTF-8的Python IDE,或者写入文件并在支持UTF-8的编辑器中查看它们

当然,当前版本的Python(特别是3.6+)对Unicode的支持要好得多。他们忽略Windows终端编码,直接调用支持Unicode的Win32 API。他们甚至可以在终端上处理中文,尽管这需要字体支持才能正常查看

>>> import xml.etree.ElementTree as et
>>> test = et.Element('test')
>>> test.text = u'Héllo'
>>> print(et.tostring(test,encoding='utf8'))
<?xml version='1.0' encoding='utf8'?>
<test>Héllo</test>
>>> print test.text
Héllo