[Python-de] Python verschluckt sich an chinesischen Schriftzeichen

martin at v.loewis.de martin at v.loewis.de
Sa Apr 21 01:58:50 CEST 2012


> bei bestimmten chin. Schriftzeichen (𠃓𤔔𤴓𠕁𠂇𦍌𠂉𠀎 und weitere,
> alle aus dem Bereich U+2xxxx) meint Python len(s) ist gleich 2.
> Außerdem beendet sich IDLE einfach, wenn man das Zeichen in die
> Konsole kopieren will (unter Windows, Python 3.2.2).
>
> Kann das evtl. jemand bestätigen?

Klar. "Verschlucken" ist allerdings etwas falsch beschrieben:
das passiert in voller Absicht. Es handelt sich um Zeichen
außerhalb der Basic Multilingual Plane, mit Codes größer
0xFFFF. Diese Zeichen können nicht in 2 Byte kodiert werden.

Python 3.2 benutzt unter Windows deshalb UTF-16, und da werden
für so ein Zeichen 2 "code units" benötigt; für BMP-Zeichen
aber nur eins. Unter Linux verwendet Python i.d.R. UTF-32,
wo die "code unit" vier Byte groß ist und jedes Zeichen also
die Länge 1 hat. Unter Windows wird UTF-16 verwendet aus
Kompatibilität zum Windows-API.

In Python 3.3 wird, dank PEP 393, auf allen Systemen einheitlich
eine variable interne Darstellung verwendet, sodass diese Zeichen
dann die Länge 1 haben (und vier Byte im Speicher benötigen).

Der IDLE-Absturz wird in 3.3 auch behoben sein. Allerdings kann
IDLE die Zeichen nicht darstellen, weil Tk auf die BMP beschränkt
ist.

Ciao,
Martin




Mehr Informationen über die Mailingliste python-de