在Python中更正len()32位unicode字符串

时间:2015-03-05 19:27:01

标签: python-2.7 unicode

我在Python 2.7中遇到32位unicode字符串的问题。一个简单的声明,例如:

s = u'\U0001f601'
print s

将在shell中打印一个漂亮的(笑脸)(如果shell支持unicode)。问题是,当我尝试:

print len(s), s.encode('latin-1', errors='replace')

我对不同的平台有不同的回应。在Linux中,我得到:

1 ?

但是在Mac中,我得到了:

2 ??

字符串声明是否正确?这是Python for Mac中的一个错误吗?

1 个答案:

答案 0 :(得分:2)

OS X Python已经使用UCS - 2(真正的UTF-16)支持而不是Linux的UCS-4支持进行编译。这意味着使用长度为2个字符的surrogate pair来表示OS X上的SMP字符。