[Python-de] korrekte Darstellung der Umlaute

Bernd Nawothnig Bernd.Nawothnig at t-online.de
Do Apr 5 21:03:36 CEST 2012


On 2012-04-05, Michael Ströder wrote:
> 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.

Der Unterschied liegt in der Semantik. Bytes sind in Python 3 keine
Strings mehr, das ist ein eigener Datentyp, den man nicht einfach mit
Strings vermanschen kann. Und dieser Unterschied ist gerade bei einer
Hochsprache wichtig. Python 2 verhält sich da eher wie C (was kein
Ruhmesblatt ist).

>> 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.

Klar. Aber mehr muss man sich mit Kodierungen nun mal wirklich nicht
beschäftigen, das hat rein gar nichts mit "nicht denken wollen" zu
tun. Es ist schlicht unnötig, verschiedene Typen von Strings
nebeneinander zu haben, nachdem man sie erstmal im Speicher hat.

Und man zeigt umgekehrt nicht unbedingt Intelligenz, wenn man Dinge
komplizierter redet, als sie in Wirklichkeit sind :-)

>>>  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.

Du wirst es vermutlich nicht glauben, aber ich habe schon an einem
Rechner gearbeitet, der kannte als kleinste adressierbare Einheit ein
24 Bit breites Halbwort. Da war nix mit Bytes. 

Man muss da also zunächst mal gar nichts, es hat sich lediglich so
eingeschliffen.

> 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).

Was ein ziemliches Übel ist und eine der Ursachen für die Schaffung
von Unicode war.

>> 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.)

Oh, ein Die-Hard :-)




Bernd

-- 
"Die Antisemiten vergeben es den Juden nicht, dass die Juden Geist
haben - und Geld." [Friedrich Nietzsche]


Mehr Informationen über die Mailingliste python-de