2012-10-07 50 views

回答

3

在編程語言中,不能總是將字符串視爲字符序列,因爲通常它們實際上是一系列字節。您不能將每個字符或符號存儲在8位中,字符編碼會創建一些規則將多個字節組合爲一個字符。

在utf-8中編碼的字符串'абв'的情況下,您擁有的是代表3個字符的6個字節。如果要計算字符數而不是字節數,請確保從unicode字符串中獲取長度。

+0

我猜是這樣的...感謝。 – scythargon

+0

這就是你爲什麼會發生這種情況的正確答案 - 如果你對某種方式感興趣以達到你所期望的(即能夠計數字符),使用編解碼器模塊打開你的文件'閱讀中......這會在閱讀時將它強制轉換爲unicode,而使用本地unicode字符串時,len()方法將返回字符數。 – jlmcdonald

+0

@jlmcdonald或只是不重新編碼爲utf-8 - s.decode('windows-1251')給出一個unicode字符串。 – lvc

2
>>> print "абв" 
абв 
>>> print [char for char in "абв"] 
['\xd0', '\xb0', '\xd0', '\xb1', '\xd0', '\xb2'] 

這就是爲什麼:)