2014-07-18 53 views
0

如果我做的:LEN()与Unicode字符串

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

我得到:

€ 
3 
1 

但是,如果我做的:

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

我得到:


4 
2 

在第二个示例中,对于一个字符unicode字符串u“”,len()函数返回2而不是1。

有人可以向我解释为什么会出现这种情况吗?

回答

2

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

Python 2中也可以与用于unicode(所谓的“宽”的构建)启用UTF-32,这意味着最unicode对象采取两倍存储器编译,但随后len(u'') == 1

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

str在Python 3.0到3.2是在Python 2

+0

一样unicode我怎么能循环通过包含这种编码的Unicode字符字符串?有些东西像你“”。 – lessthanl0l

+0

@ lessthanl0l:尝试像这样:http://stackoverflow.com/questions/7494064/how-to-iterate-over-unicode-characters-in-python-3 –