2013-01-06 82 views
-2

我正在使用Python 2.7在Python中,“utf8”字符串编码的类型是什么?

我正在读取包含“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

我不熟悉Python,但是你认为'utf-8'是什么类型?此外,产量如预期;你还想要什么? –

+1

此演示文稿可能会帮助您了解基本原理:[实用Unicode,或者,我该如何阻止疼痛?](http://bit.ly/unipain)。 –

回答

1

我不知道这是否回答你的问题,但这里是我观察到的东西。

如果你只是想串入一个打印的形式,调用解码后只是停止。我不确定为什么在成功将is8859转换为unicode后,您想要将其编码为UTF8。

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

谢谢,这回答了“如何”的问题... – jdpiguet

2

str在Python 2指编码串,即一个字节序列。这是记录的行为。该解码strunicode类型。

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

相反,在Python 3 str将是一个文本字符串(Unicode),并调用encode会给你一个bytes的实例。

所以,在Python 2,UTF-8字符串将是str,因为它进行编码。

我第二次由斯内德推荐:看看他链接到presentation(噢,我的,是他自己说话?)。当我用这些东西struggling时,它帮了我很多。

+0

很好的解释,除非你用过'decode',而不是'encode'在有关Python 3行 – abarnert

+0

所以,如果我理解正确,'unicode'并不像“UTF-8”编码'str'? – jdpiguet

+0

@jdpiguet正确。 'unicode'是一个Unicode字符串,根本不编码。 –