cookie: (PYTHON) Unicode-Strings innerhalb anderer Datenstrukturen

Beitrag lesen

Hallo dedlfix,

erstmal vielen Dank für Deine Antwort.

Das selbe passiert, wenn du print repr(a) eingibst. Wenn du eine komplexe Struktur ausgeben willst, wird sie offensichtlich in der von repr() gelieferten Darstellung ausgegeben.

Ja, das kann gut sein. Aber warum nur bei komplexen Strukturen und nicht bei einem einzelnen String?

Welchen Wert hat es denn eigentlich, einen String als Unicode zu bezeichnen, wenn es keine Angabe zu der verwendeten Codierung gibt (z.B. UTF-8, UTF-2 etc.)?

Die Kodierung muss erst bei der Ausgabe berücksichtigt werden. Die interne Darstellung kann doch sein wie sie will.

Okay, aber wozu gibt es dann das u bzw. U vor dem String? Der Python-Interpreter merkt es doch sowieso, wenn ein String Nicht-ASCII-Zeichen enthält.
Wenn die interne Darstellung "sein kann wie sie will", dann brauche ich die Kodierung doch tatsächlich erst zum Zeitpunkt der Ausgabe festzulegen, und nicht schon beim Erstellen des Strings.

Den Default-Wert der Ausgabekodierung kannst du mit

import sys
  print sys.getdefaultencoding()

abfragen.

Bei mir kommt da: 'ascii'.
Was bedeutet das jetzt? Die folgende Sequenz, die ich durchführen kann, dürfte doch gar nicht möglich sein, weil ich 'ähnlich' nicht als Unicode angegeben habe:

a = 'ähnlich'
print a

ähnlich

Was passiert hier? Müsste nicht mit einer Fehlermeldung abgebrochen werden, da der vermeintliche ASCII-String ein Zeichen enthält, das im ASCII-Zeichenvorrat doch gar nicht vorkommt?
Wieso kann Python mit der Ausgabekodierung ASCII, die ich nirgendwo beeinflusst oder geändert habe, einen Nicht-ASCII-String ausgeben?

Setzen geht beispielsweise in einer Datei namens sitecustomize.py. Liegen kann sie wohl an mehreren Stellen. Bei mir liegt sie unter /usr/lib/python2.5/site-packages/.

Das Verzeichnis gibt es bei mir auch, die Datei aber nicht.

Auf jeden Fall möchte ich nun gerne, dass Strings innerhalb von anderen Datentypen bei der Ausgabe ebenso behandelt wie einzelne Strings.

Dann überschreib dir __str__. Die Ausgabe von Strukturen oder Objekten hat doch nur Kontrollausgabencharakter. Sie ist sicher nicht für Anwenderaugen bestimmt.

Das stimmt. ;-)
Gute Idee, __str__ zu überschreiben, auch wenn ich das Verhalten von Python in diesem Punkt inkonsistent und unpraktisch finde - solche "Kunstgriffe" sollten IMHO gar nicht nötig sein.

Nochmal danke!

Viele Grüße
cookie