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