是的,只要你编译你的Python与广泛的unicode支持。
默认情况下,Python仅使用窄Unicode支持构建。支持与广泛支持:
./configure --enable-unicode=ucs4
您可以验证使用什么配置通过测试sys.maxunicode
:
import sys
if sys.maxunicode == 0x10FFFF:
print 'Python built with UCS4 (wide unicode) support'
else:
print 'Python built with UCS2 (narrow unicode) support'
广泛的构建将使用UCS4字符所有 Unicode值,增加一倍,这些内存使用情况。 Python 3.3切换到可变宽度值;只有足够的字节用于表示当前值中的所有字符。
快速演示显示出广泛的构建正确处理您的样品Unicode字符串:
$ python2.6
Python 2.6.6 (r266:84292, Dec 27 2010, 00:02:40)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.maxunicode
1114111
>>> [x for x in u'\U0002f920\U0002f921']
[u'\U0002f920', u'\U0002f921']
哪种编码不使用3.3? –
@DavidHeffernan:参见[PEP 393](http://docs.python.org/3/whatsnew/3.3.html#pep-393);直到UCS4,如果所有字符的2个LSB字节都为0,则下降到UCS2,如果所有字符的剩余LSB为0,那么直到拉丁-1。 –
谢谢。看起来非常狂野。维护字符串的并行副本。有趣的是,他们选择了与负载相关的编码 –