您的Python二进制文件是使用UCS-2支持( 窄版 )进行编译的,并且在内部,使用代理对表示BMP(基本多语言平面)之外的任何内容。
如果这很重要,您将不得不重新编译Python二进制文件以使用UCS-4(./configure --enable- unicode=ucs4
将启用它),或者升级到Python 3.3或更高版本,在该版本中,Python的Unicode支持被彻底修改以使用在ASCII之间切换的可变宽度Unicode类型。 ,UCS-2和UCS-4(包含的代码点要求)。
在Python 2.7和3.0-3.2版本上,您可以通过检查sys.maxunicode
值来检测您拥有哪种构建;它2^16-1 == 65535 == 0xFFFF
适用于狭窄的UCS-2版本,1114111 == 0x10FFFF
适用于广泛的UCS-4版本。在Python 3.3及更高版本中,它始终设置为1114111。
演示:
# Narrow build
$ bin/python -c 'import sys; print sys.maxunicode, len(u"\U0001f44d"), list(u"\U0001f44d")'
65535 2 [u'\ud83d', u'\udc4d']
# Wide build
$ python -c 'import sys; print sys.maxunicode, len(u"\U0001f44d"), list(u"\U0001f44d")'
1114111 1 [u'\U0001f44d']