是的,只要你編譯你的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。 –
謝謝。看起來非常狂野。維護字符串的並行副本。有趣的是,他們選擇了與負載相關的編碼 –