Python中“utf8”字符串编码的类型是什么?

时间:2013-01-06 12:48:57

标签: python string encoding python-2.x

我正在使用Python 2.7

我正在读取包含“iso-8859-1”编码信息的文件。 解析后,我得到字符串中的结果,即s1

>>> s1
'D\xf6rfli'
>>> type(s1)
<type 'str'>
>>> s2=s1.decode("iso-8859-1").encode("utf8")
>>> s2
'D\xc3\xb6rfli'
>>> type(s2)
<type 'str'>
>>> print s1, s2
D�rfli Dörfli
>>> 

调用s2后,为什么str的类型仍为.encode? 如何将其从str转换为utf-8

2 个答案:

答案 0 :(得分:2)

Python 2中的

str表示编码的字符串,即字节序列。这是记录在案的行为。 已解码 str的类型为unicode

UTF-8编码,以及ISO-8859-1。所以你只需解码你的字符串,然后用另一种编码进行编码,产生相同类型的数据。

相反,在Python 3中str将是一个文本字符串(在Unicode中),并在其上调用encode将为您提供bytes的实例。

因此,在Python 2中,UTF-8字符串将为str,因为它是编码的。

我是Ned推荐的第二个:看看他链接的presentation(哦,我的,这是他自己的谈话吗?)。当我struggling做这些事时,它给了我很多帮助。

答案 1 :(得分:1)

我不确定这是否能回答你的问题,但这就是我所观察到的。

如果您只想将字符串转换为可打印的形式,请在调用decode后停止。在成功从is8859转换为unicode后,我不确定为什么要尝试编码为UTF8。

>>> s1 = 'D\xf6rfli'
>>> s1
'D\xf6rfli'
>>> s2 = s1.decode("iso-8859-1")
>>> s2
u'D\xf6rfli'
>>> print s2
Dörfli
>>>