>>> c='中文'
>>> c
'\xe4\xb8\xad\xe6\x96\x87'
>>> len(c)
6
>>> cu=u'中文'
>>> cu
u'\u4e2d\u6587'
>>> len(cu)
2
>>> s=''
>>> s
'\xf0\xa4\xad\xa2'
>>> len(s)
4
>>> su=u''
>>> su
u'\U00024b62'
>>> len(su)
2
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
>>> sys.stdout.encoding
'UTF-8'
首先,我想使自己的一些概念清晰。 我知道,像cu=u'中文'
這樣的unicode字符串,實際上是由python shell默認的UTF-16編碼的。對? 那麼,當我們看到'\u*'
時,那實際上是UTF-16 encoding
?而'\u4e2d\u6587'
是一個unicode字符串或字節字符串?但cu
必須存儲在內存中,所以len(unicode字符串)
0100 1110 0010 1101 0110 0101 1000 0111
(轉換\ u4e2d \ u6587二進制)是形式cu
如果一個字節的字符串保存? 對嗎?
但它不能是字節串。否則len(cu)不能是2,應該是4! 所以它必須是unicode字符串。 但是!!!我也learned是
蟒蛇試圖暗中編碼與任何 方案中sys.stdout.encoding當前設置的Unicode字符串,在這種情況下它的 「UTF-8」。
>>> cu.encode('utf-8')
'\xe4\xb8\xad\xe6\x96\x87'
所以!怎麼可能len(cu)
== 2 ???那是因爲裏面有兩個'\u'
嗎?
但是,這並沒有使len(su) == 2
感覺!
我錯過了什麼嗎?
我使用python 2.7.12
個字符! =字節。一個utf16字符是2個字節,但只有一個字符。 –
您想了解有關Unicode * *的信息*。見http://nedbatchelder.com/text/unipain.html –
@MartijnPieters謝謝!這是非常有幫助 – MMMMMCCLXXVII