Frage zu Umlauten und Kodierung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
dennis.py

Hallo Forum,

ich bin neu bei Python (habe mich eine zeitlang an C++ versucht, mich aber jetzt entschieden, doch erstmal mit Python einzusteigen und viel später nochmal einen C++-Versuch zu wagen). Ich arbeite gerade "A Byte of Python" durch und habe eine Frage zum Encoding.

Mein Code:

Code: Alles auswählen

#!/usr/bin/python
#-*- coding: utf-8 -*-

liste = ("Käse", "Äpfel", "Ölsardinen")

for i in liste:
    print i

print liste
Die Ausgabe:

Code: Alles auswählen

Käse
Äpfel
Ölsardinen
('K\xc3\xa4se', '\xc3\x84pfel', '\xc3\x96lsardinen')
Warum ignoriert er die Kodierung, wenn ich "liste" als Ganzes ausgebe?
Zuletzt geändert von dennis.py am Sonntag 22. Mai 2011, 12:47, insgesamt 1-mal geändert.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Bei Listen wird für jedes Element `repr(element)` aufgerufen, während `print` ein `str(element)` macht. Intern benötigt ein Umlaut eben zwei Zeichen. Die Umwandlung geschieht erst durch die Darstellung "nach außen".
dennis.py

snafu hat geschrieben:Bei Listen wird für jedes Element `repr(element)` aufgerufen, während `print` ein `str(element)` macht. Intern benötigt ein Umlaut eben zwei Zeichen. Die Umwandlung geschieht erst durch die Darstellung "nach außen".
Die Hilfe spricht bei repr() von einer "string representation", bei str() von einer "nice string representation". Kann man in einfachen Worten erklären, wo der Unterschied in der Arbeitsweise liegt, oder sollte ich mich mit dem Verständnis gedulden, bis ich insgesamt etwas mehr über Python weiß?
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

`repr()` liefert eine ascii Repräsentation des Strings, `str()` gibt den String selbst zurück.
dennis.py

Ah, okay, danke euch! :)
BlackJack

@dennis.py: Zwei Anmerkungen: Das was Du da `liste` nennst ist keine sondern ein Tupel. Und man sollte in echten Programmen die Datentypen möglichst aus dem Namen heraus halten. Weil es immer mal wieder vorkommt, dass man den Typen ändert und dann entweder jedes Vorkommen des Namens anpassen muss; oder das lässt und dann irreführende Namen im Programm hat.
dennis.py

BlackJack hat geschrieben:@dennis.py: Zwei Anmerkungen: Das was Du da `liste` nennst ist keine sondern ein Tupel.
Stimmt. Aufgefallen war mir das Phänomen zum ersten Mal bei einer Liste, gestellt habe ich die Frage aber, als ich im Kapitel über Tupel war. Sorry, mein Fehler.
BlackJack hat geschrieben:Und man sollte in echten Programmen die Datentypen möglichst aus dem Namen heraus halten. Weil es immer mal wieder vorkommt, dass man den Typen ändert und dann entweder jedes Vorkommen des Namens anpassen muss; oder das lässt und dann irreführende Namen im Programm hat.
Das ist mir klar und ich hätte es in einem echten Programm auch nicht gemacht. Trotzdem danke für den Hinweis! :)
Antworten