我想了解python 2.5如何處理unicode字符串。儘管現在我認爲我已經很好地掌握了我應該如何在代碼中處理它們,但我並不完全理解幕後發生了什麼,特別是當您在解釋器的提示符下鍵入字符串時。Python Unicode字符串和Python交互式解釋器
因此python pre 3.0有兩種類型的字符串,即:str
(字節字符串)和unicode
,它們都來自basestring
。字符串的默認類型是str
。
str
對象沒有其實際編碼的概念,它們只是字節。要麼你自己編碼了一個unicode字符串,因此知道它們在哪個編碼中,或者你已經讀過一串預先編碼的字節流(不知道)。你可以猜測一個字節字符串的編碼,這個字符串的編碼方式對你來說是未知的,但是沒有一種可靠的方法來解決這個問題。您最好的選擇是儘早解碼,在代碼中隨處使用unicode,並且編碼時間較晚。
這很好。但是輸入到解釋器中的字符串確實是在你背後爲你編碼的?假如我對Python中字符串的理解是正確的,python用來做出這個決定的方法/設置是什麼?
我的困惑之源是當我在我的系統的python安裝和編輯器的嵌入式python控制檯上嘗試同樣的事情時得到的不同結果。
# Editor (Sublime Text)
>>> s = "La caña de España"
>>> s
'La ca\xc3\xb1a de Espa\xc3\xb1a'
>>> s.decode("utf-8")
u'La ca\xf1a de Espa\xf1a'
>>> sys.getdefaultencoding()
'ascii'
# Windows python interpreter
>>> s= "La caña de España"
>>> s
'La ca\xa4a de Espa\xa4a'
>>> s.decode("utf-8")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python25\lib\encodings\utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa4 in position 5: unexpected code byte
>>> sys.getdefaultencoding()
'ascii'
我得到'None'在SublimeText同時:'打印sys.stdin。編碼「,而在閒置時,我得到了運行Mac OS X的」UTF-8「 – andi 2013-12-03 14:57:30