2012-09-12 53 views
0

如果我這樣做在python:Python中默認存儲Unicode字符串的類型是什麼樣的represantation?

>>> name = "âțâîâ" 
>>> name 
'\xc3\xa2\xc8\x9b\xc3\xa2\xc3\xae\xc3\xa2' 
>>> len(name) 
10 
>>> u = name.decode('utf-8') 
>>> len (u) 
5 
>>> 

什麼是蟒蛇的默認編碼,如果你不指定任何?

+0

見http://docs.python.org /howto/unicode.html –

+3

請,**沒有「unicode編碼」這樣的事情**。有Unicode,有編碼。 Unicode是**不是**編碼。 –

+0

@DanielRoseman只是谷歌:「unicode編碼」,也是我的字典中說的:U·ni·code Noun /yo͞oniˌkōd/ 一種國際編碼標準,用於不同的語言和腳本,每個字母,數字或符號被分配給獨特的數值適用於不同的平臺和程序 –

回答

1

也許你正在使用Python 2,(如果沒有,這個答案是壞)

什麼情況如下:

>>> name = "âțâîâ" 

分配給name一(字節)的字符串,其內容是由你的終端編碼決定。你的文本編輯器。在你的情況下,這顯然是UTF8。

這些字節顯示有

>>> name 
'\xc3\xa2\xc8\x9b\xc3\xa2\xc3\xae\xc3\xa2' 

只有當你與

>>> u = name.decode('utf-8') 

解碼它,你得到一個unicode字符串。在這裏你指定編碼。

一種更簡單,更可靠的方法是直接做

u = u"âțâîâ" 

,然後才提取字節根據你想要的編碼:

name = u.encode("utf-8") 
+0

是的,我正在使用Python 2 –

2

您正在指定一個python字符串文字,它們的編碼是由您的編輯器的默認設置(或者在您的終端的python解釋器的情況下)確定的。 Python在這方面沒有發言權。

默認情況下,python 2試圖將源代碼解釋爲ASCII。在python 3中,這已被切換爲UTF-8。

請閱讀Python Unicode HOWTO以進一步瞭解Unicode與輸入和輸出編碼的區別。你也應該閱讀Joel Spolksy的article on Unicode

相關問題