我正在使用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
?
答案 0 :(得分: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
>>>