2014-03-24 84 views
2

我認爲我主宰了Python 2中的所有Unicode東西,但似乎有些東西我不明白。我從的HTML去我python腳本該用戶輸入:如何將包含unicode字符的字符串轉換爲unicode?

a = "m\xe9dico" 

我想這是médico(也就是醫生)。所以,來轉換爲Unicode我做:

a.decode("utf-8") 

或者:

unicode(a, "utf-8") 

但這是拋出:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 1: ordinal not in range(128) 

如何才能做到這一點?

+0

這已經是unicode。 utf-8版本將是'm \ xc3 \ xa9dico'。 –

+0

@DanielRoseman:在Python 3中,它將是一個unicode文字,但這是Python 2,因此它是8位數據,因此最好是Latin-1。 Ofc這是一個Unicode兼容的編碼,但我認爲誤導只是稱之爲「unicode」。 –

回答

5

這不是UTF-8:

print txt.decode('iso8859-1') 
Out[14]: médico 

如果你想UTF-8字符串,使用:

txt.decode('iso8859-1').encode('utf-8') 
Out[15]: 'm\xc3\xa9dico' 
+1

謝謝,+1。我通過將HTML發送給我的CGI腳本來解決這個問題,但這不是我的問題,所以我會接受這一點。 – cdonts

2

您可以前綴與u您的字符串將其標記爲字面一個unicode :

>>> a = u'm\xe9dico' 
>>> print a 
médico 
>>> type(a) 
<type 'unicode'> 

,或者到現有的字符串轉換:

>>> a = 'm\xe9dico' 
>>> type(a) 
<type 'str'> 
>>> new_a = unicode(a,'iso-8859-1') 
>>> print new_a 
médico 
>>> type(new_a) 
<type 'unicode'> 
>>> new_a == u'm\xe9dico' 
True 

延伸閱讀:Python docs - Unicode HOWTO

+0

感謝您的回答,但我沒有定義'a','cgi'模塊正在這樣做。 – cdonts

+0

謝謝,這是有效的。但是這會返回'False':'a == u「médico」'。有任何想法嗎? – cdonts

+0

如果您將其與'new_a'進行比較,您會得到'True',它可能無法自動轉換'a'。 – keyser