python utf-8行为

时间:2012-10-07 06:12:31

标签: python character-encoding

  

可能重复:
  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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

这就是原因:)