Encoding funktioniert nur interaktiv?

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
oblivion
User
Beiträge: 13
Registriert: Montag 31. März 2008, 17:21

Mittwoch 2. April 2008, 21:11

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?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 2. April 2008, 21:12

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?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Mittwoch 2. April 2008, 21:50

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.
oblivion
User
Beiträge: 13
Registriert: Montag 31. März 2008, 17:21

Mittwoch 2. April 2008, 22:10

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?
BlackJack

Mittwoch 2. April 2008, 22:48

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.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 3. April 2008, 13:57

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten