Seite 1 von 1

Encoding funktioniert nur interaktiv?

Verfasst: Mittwoch 2. April 2008, 21:11
von oblivion
Hallo zusammen, mal wieder eine Anfängerfrage:
Wenn ich im interaktiven Modus folgendes eingeben:

Code: Alles auswählen

 
s = u"übermäßig viele Wörter mit Vokalbuchstaben"
s_utf8 = s.encode("utf8")
s_utf8
bekomme ich das gewünschte Ergebnis:
'\xc3\xbcberm\xc3\xa4\xc3\x9fig viele W\xc3\xb6rter mit Vokalbuchstaben'

führe ich das ganze im Skript aus, bekomme ich folgende Fehlermeldung:

File "./unicode.py", line 2
SyntaxError: Non-ASCII character '\xc3' in file ./unicode.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

diese Fehlermeldung verschwindet, sobald ich #coding: utf-8 eingebe, das ist mir schon klar, allerdings wird dann der Ausgabetext auch anders angezeigt, aber warum?

Re: Encoding funktioniert nur interaktiv?

Verfasst: Mittwoch 2. April 2008, 21:12
von Leonidas
oblivion hat geschrieben:diese Fehlermeldung verschwindet, sobald ich #coding: utf-8 eingebe, das ist mir schon klar, allerdings wird dann der Ausgabetext auch anders angezeigt, aber warum?
Na genau das wäre der Teil der uns interessiert. Was wird denn ausgegeben? Und bist du sicher, dass die Datei wirklich in UTF-8 abgespeichert ist?

Re: Encoding funktioniert nur interaktiv?

Verfasst: Mittwoch 2. April 2008, 21:50
von Darii
oblivion hat geschrieben:diese Fehlermeldung verschwindet, sobald ich #coding: utf-8 eingebe, das ist mir schon klar, allerdings wird dann der Ausgabetext auch anders angezeigt, aber warum?
Weil

Code: Alles auswählen

s_utf8
etwas anders als

Code: Alles auswählen

print s_utf8
ist. Der erste Fall gibt die nur im interaktiven Modus irgendetwas aus dann auch nicht str(s_utf8) sondern repr(s_utf8) was bei unicode-Objekten zu den von dir bemerkten Symptomen führt.

Edit: Ok, hab was überlesen, das weißt du schon. Dann wäre eine nähere Beschreibung hilfreich.

Verfasst: Mittwoch 2. April 2008, 22:10
von oblivion
Ok, ich denke ich hab das Problem verstanden, bis auf Deine Frage Leonidas:
Was meinst Du mit in UTF-8 abgespeichert?
Die Ausgabe von file auf die entsprechende Datei sagt mir
a python script executable
muss das geändert werden?

Verfasst: Mittwoch 2. April 2008, 22:48
von BlackJack
Damit ist gemeint, dass die angegebene Kodierung im Kommentar mit der tatsächlichen Kodierung der Datei übereinstimmen muss. Wenn Du da utf-8 rein schreibst, dann sollte der Text auch als utf-8 abgespeichert werden.

`file` kann das nicht herausfinden, weil man Kodierungen nicht automatisch zuverlässig feststellen kann. Wenn das möglich wäre, bräuchte man den Kommentar ja nicht.

Verfasst: Donnerstag 3. April 2008, 13:57
von Leonidas
Man könnte ``chardet`` verwenden, und ihn raten lassen. Aber das Problem besteht da gar nicht. Sag deinem Editor, die Datei soll als UTF-8 gespeichert werden, schließe sie und mache sie wieder auf. Dann sollten alle Umlaute intakt sein und die Datei nun wirklich UTF-8, so wie im Kommentar steht.