[Python-de] korrekte Darstellung der Umlaute

Michael Ströder michael at stroeder.com
Do Apr 5 20:46:37 CEST 2012


Bernd Nawothnig wrote:
> On 2012-04-05, Michael Ströder wrote:
>>> Du beschreibst das Elend des heillosen Mischmaschs zwischen
>>> Bytesstrings und Unicode in Python 2 ziemlich gut. Genau solche
>>> Ungereimtheiten waren der Anstoß, das alles in Python 3 sehr viel
>>> schöner, aber dann eben leider nicht mehr abwärtskompatibel zu lösen.
>>> Strings sind dort grundsätzlich Unicode, den dann überflüssigen
>>> Datentyp Unicode gibt es dort folglich nicht mehr.
>>
>> Was genau ist der prinzipielle Unterschied? Meines Erachtens lediglich, dass
>> der Default ein anderer ist. Trotzdem muss man das Thema verstanden haben.
> 
> Es gibt in Python 3 gar keine Bytestrings mehr (und das ist auch gut
> so).

Sorry, aber ob Du jetzt bytes vs. str in Python3 oder '' vs. u'' in Python2
geeignet behandeln musst, macht keinen prinzipiellen Unterschied. Man muss
auch in Python3 drauf achten was man wo hinreicht.

> Und durch das dann natürlich nötige Hinzufügen eines weiteren
> Stringtyps (unicode) sind Verwechslungen und vielfache Fehler einfach
> vorpragrammiert. Klar, wenn man keine Fehler macht ("das Thema
> verstanden hat"), funktioniert das auch, aber es ist weder schön noch
> nötig so.

Auch Python3 nimmt Dir das Denken beim I/O nicht ab. Wer daran glaubt wird
zwangsläufig wieder in Probleme laufen.

>>  Letztlich muss man aber bei irgendeinem I/O die Unicode-Zeichenkette
>>  in einen Byte-Buffer mit geeignetem Encoding konvertieren.
> 
> Ja, leider, weil man sich irgendwann auf Bytes als kleinste
> ansprechbare Einheit geeinigt hat und darum auf die Krücke UTF-8
> ausweichen muss.

Das ist IMO ein sehr merkwürdiges Statement. Irgendwann muss halt ein
Byte-Encoding her sonst kannst Du kein I/O machen. Es gibt auch eine Welt
außerhalb Deiner Python-Anwendung - sogar ziemlich viel davon. ;-)
Und es gibt auch verschiedenste immer noch im Einsatz befindliche Encodings
(siehe RFC 1345).

Ciao, Michael.
(der anno 1998 in den ersten Versionen von web2ldap unter Python 1.4/5 noch
UTF-8-Enkoder/-Dekoder selbst geschrieben und sich mithilfe von RFC 1345 durch
EBCDIC-Varianten gebissen hat.)


Mehr Informationen über die Mailingliste python-de