Christian Seiler: andere Serversprachen neben PHP - Vorteile, Nachteile

Beitrag lesen

Hallo,

[Python]
Und gibt es da nicht auch so ein Problem mit utf-8? Kann aber sein, ich das mit einem Zope-Problem verwechsle...

Zope kenne ich nur vom Namen her, allerdings kann ich sagen, dass Python *keinerlei* Probleme (die man sich nicht selbst macht ;)) hat mit unterschiedlichen Zeichenkodierungen und es die einzige Programmiersprache ist (die ich kenne), die das mit Unicode und so weiter ordentlich löst. Es gibt nämlich "normale Strings", die nichts anderes sind als Byte-Arrays, auf die String-Funktionen dann auch entsprechend wirken. Und es gibt "Unicode-Strings", die dann zeichenbasiert sind. Und man kann sehr leicht zwischen beiden hin- und herkonvertieren, Beispiel:

bytestr = "K\xc3\xa4se"  
bytestr2 = "K\xe4se"  
unistr = u"K\xe4se"  
print repr (unicode (bytestr, "UTF-8"))  
print repr (unicode (bytestr2, "ISO-8859-1"))  
print repr (unistr.encode ("UTF-8"))  
print repr (unistr.encode ("ISO-8859-1"))

bytestr ist hier eine Ansammlung von Bytes in UTF-8, bytestr2 ist eine Ansammlung von Bytes in Latin1, unistr eine Ansammlung von Unicodezeichen.

Die erste print-Zeile wandelt bytestr in einen Unicode-String um und gibt das aus (repr gibt zusätzlich noch aus, was man in Python schreiben müsste, um das gleiche Resultat zu erhalten). Die zweite print-Zeile wandelt bytestr in einen Unicode-String um (hier wird die andere Kodierung verwendet) und gibt ihn aus - kommt das gleiche bei raus in beiden Fällen und ist zufälligerweise ;-) identisch mit unistr.

Die dritte print-Zeile wandelt unistr in eine Byte-Folge in UTF-8 um und die vierte in eine in Latin1.

Einziger Nachteil von Unicode-Strings ist es, dass man diese nicht als Keys für Dictionaries (Hashes in Perl, assoziative Arrays in PHP) nutzen kann - aber dort kann man zumindest nach UTF-8 konvertieren, dann geht nix verloren (außer ein winziges bisschen Performance).

Viele Grüße,
Christian