2013-01-06 123 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字符串,根本不編碼。 –