可能重复:
Python returning the wrong length of string when using special characters
我从windows-1251
中的文件中读取多语言字符串,例如s="qwe абв"
(俄语第二部分),然后:
for i in s.decode('windows-1251').encode('utf-8').split():
print i, len(i)
我得到了:
qwe 3
абв 6
天啊,为什么? O_O
答案 0 :(得分:3)
在编程语言中,您不能总是将字符串视为字符序列,因为它们实际上通常是一个字节序列。您不能以8位存储每个字符或符号,字符编码会创建一些规则以将多个字节组合成单个字符。
对于以utf-8编码的字符串'абв'
,您拥有的是6个字节,代表3个字符。如果要计算字符数而不是字节数,请确保从unicode字符串中获取长度。
答案 1 :(得分:2)
>>> print "абв"
абв
>>> print [char for char in "абв"]
['\xd0', '\xb0', '\xd0', '\xb1', '\xd0', '\xb2']
这就是原因:)