0

可能重复:
Python 在使用特殊字符时返回错误的字符串长度

我从文件中读取了一个多语言字符串windows-1251,例如s="qwe абв"(俄语的第二部分),然后:

for i in s.decode('windows-1251').encode('utf-8').split():
  print i, len(i)

我得到:

qwe 3
абв 6

天哪,为什么?o_O

4

2 回答 2

3

在编程语言中,您不能总是将字符串视为字符序列,因为通常它们实际上是字节序列。您不能将每个字符或符号存储在 8 位中,字符编码会创建一些规则来将多个字节组合成一个字符。

对于以 utf-8 编码的字符串'абв',您拥有的是代表 3 个字符的 6 个字节。如果要计算字符数而不是字节数,请确保从 unicode 字符串中获取长度。

于 2012-10-07T06:21:58.813 回答
2
>>> print "абв"
абв
>>> print [char for char in "абв"]
['\xd0', '\xb0', '\xd0', '\xb1', '\xd0', '\xb2']

这就是为什么 :)

于 2012-10-07T06:34:46.850 回答