Ja, vorausgesetzt, Sie haben Python mit Wide-Unicode-Unterstützung kompiliert.
Standardmäßig wird Python nur mit eingeschränkter Unicode-Unterstützung erstellt. Aktivieren breite Unterstützung mit:
./configure --enable-unicode=ucs4
Sie können überprüfen, welche Konfiguration durch Testen sys.maxunicode
verwendet wurde:
import sys
if sys.maxunicode == 0x10FFFF:
print 'Python built with UCS4 (wide unicode) support'
else:
print 'Python built with UCS2 (narrow unicode) support'
Eine große build verwenden UCS4 Zeichen für alle Unicode-Werte, die Speichernutzung für diese Verdoppelung. Python 3.3 wechselte zu variablen Breitenwerten; Nur genügend Bytes werden verwendet, um alle Zeichen im aktuellen Wert darzustellen.
Schnell Demo zeigt, dass eine große Build Griffe Unicode Ihre Probe Zeichenfolge richtig: Verwendung
$ 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']
Welche Codierung tut 3.3? –
@DavidHeffernan: Siehe [PEP 393] (http://docs.python.org/3/whatsnew/3.3.html#pep-393); bis zu UCS4, Herunterfahren auf UCS2, wenn die 2 LSB-Bytes 0 für alle Zeichen sind, bis hinunter zu Latin-1, wenn das verbleibende LSB für alle Zeichen 0 ist. –
Danke. Sieht ziemlich wild aus. Parallele Kopien der Zeichenkette pflegen. Und interessant, dass sie die nutzlastabhängige Kodierung gewählt haben. –