On 2012-04-21, wb wrote:
nachdem ich noch etwas über surrogate pairs usw. nachgelesen habe, kann ich wohl davon ausgehen, dass das Verhalten von len() so korrekt ist. Allerdings sollte IDLE wohl trotzdem nicht abstürzen.
Das stimmt allerdings.
Laut sys.maxunicode (= 65535) habe ich wohl auch eine UTF-16 build, was genau das heißen mag...
Das heißt, dass dann nicht jedes Unicodezeichen intern abgespeichert werden kann, also nicht nur nicht dargestellt werden kann. Und das kann sehr gut der Grund für dieses Fehlverhalten sein. Du solltest entweder einen Wideunicode-Build, also mit 32-Bit Zeichen testen, oder auf Python 3.3 wechseln, welches es aber leider erst in einer Alpha-Version gibt. Aber dort wird grundsätzlich jedes Unicodezeichen unterstützt und es gibt auch keine Unterscheidung in wide- (32-Bit) und narrow (16 Bit) Builds mehr. Stattdessen wird automatische zur Laufzeit für jeden String die speicherplatzeffizienteste Methode (8, 16 oder 32 Bit) gewählt. Von letzterem wirst Du als Programmierer aber nichts bemerken. Nach außen verhält sich alles genau wie ein 32-Bit wide-build, nur dass es deutlich weniger Speicher benötigt. Bernd -- "Die Antisemiten vergeben es den Juden nicht, dass die Juden Geist haben - und Geld." [Friedrich Nietzsche]