如果我这样做:
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。
有人可以向我解释为什么会这样吗?
答案 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
。
len('') == 1
与Python 2中的str
相同。