AW: [Python-de] Re: Alptraum Unicode

holger krekel hpk at trillke.net
Son Dez 28 13:06:59 CET 2003


[Uwe Schmitt Sun, Dec 28, 2003 at 12:47:47PM +0100]
> 
> Hi,
> 
> ich lass den geposteten Spaghetti-Code mal weg, ist
> für eine Liste/Newsgroup/... eh viel zu lange...

Hmmm, ich finde, es gibt keinen guten Grund, solche abfaelligen
Bemerkungen ("Spagetti Code") zu schreiben, selbst wenn der gepostete
Code lang ist.  Probleme mit Unicode sind ziemlich typisch und ich
glaube, fast jeder hat da eine Konfusionsphase durchlebt. Natuerlich
koenntest Du, Olaf, auch darauf verzichten, alles was schief laueft, auf
die Sprache zu schieben :-) 

Wie auch immer, ich habe im uebrigen Martin's Postings 
und Ratschlaege bzgl. Unicode in der Vergangenheit sehr genau
gelesen und seitdem keine Unicode-Probleme mehr in meinen 
Applikationen (Danke, uebrigens!). Und wie auch Stefan schon
sagte, man sollte sich fuer eigene APIs sehr genau ueberlegen, 
ob etwas unicode oder bytestrings produziert.  

Als Faustregel sehe ich: 

intern *immer* unicode objekte verwenden und bei Interaktionen mit 
fremden Subsystemen (xml-parser, latex-output etc.) die Encodings 
ermitteln/produzieren, aber intern weiterhin alles in unicode 
halten.  

Beispiele: 

- wenn ich eine Hilfsfunktion habe, die eine
  Konfig-Datei einliest, dann erwarte ich von vorneherin *nur* 
  unicode zeichenketten, so dass ich nicht ueberall im Programm 
  wissen muss, welches encoding ein Bytestring denn nun gerade
  haben koennte.  

- Wenn ich eine Webpage generiere, dann habe ich das "<html>..." zeug
  komplett als unicode objekt und erst ganz zum Schluss wird ein bytestring
  mit einem encoding draus (das auch im html-header spezifiziert sein
  muss). 

Ich glaube, vieles waere einfacher, wenn man die automatische
Konvertierung (Coercion) von Bytestrings nach unicode-zeichenketten
wenigstens zu debug-zwecken komplett unterbinden koennte.  Der
automatische Versuch, bei einer 'bytestring + unicodestring' Operation
den bytestring als US-ASCII kodiert zu betrachten und implizit in ein
Unicode-Objekt zu wandeln, ist vielleicht "convenient" (insbesondere
fuer US-spezifische Applikationen :-) aber fuehrt eben manchmal zu
schwer debugbaren Problemen. 

gruss und viel erfolg bei der Bewaeltigung von Unicode :-)

    holger