我在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中的一个错误吗?
答案 0 :(得分:2)
OS X Python已经使用UCS - 2(真正的UTF-16)支持而不是Linux的UCS-4支持进行编译。这意味着使用长度为2个字符的surrogate pair来表示OS X上的SMP字符。