len()与unicode字符串

时间:2014-07-18 19:24:15

标签: python-2.7 unicode

如果我这样做:

print "\xE2\x82\xAC"
print len("€")
print len(u"€")

我明白了:

€
3
1

但如果我这样做:

print '\xf0\xa4\xad\xa2'
print len("")
print len(u"")

我明白了:


4
2

在第二个例子中,len()函数为一个字符的unicode字符串u""返回2而不是1。

有人可以向我解释为什么会这样吗?

1 个答案:

答案 0 :(得分:2)

Python 2可以使用UTF-16作为unicode对象的内部编码(所谓的“窄”构建),这意味着被编码为两个代理:D852 DF62。在这种情况下,len返回UTF-16单元的数量,而不是实际Unicode代码点的数量。

Python 2也可以使用为unicode启用的UTF-32进行编译(所谓的“宽”构建),这意味着大多数unicode对象占用的内存是原来的两倍,但是{{1} }

Python 3的len(u'') == 1对象,因为3.3在ISO-8859-1,UTF-16和UTF-32之间按需切换,所以你永远不会遇到这个问题:str

Python 3.0到3.2中的

len('') == 1与Python 2中的str相同。