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

Encoding funktioniert nur interaktiv?

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

Re: Encoding funktioniert nur interaktiv?

Beitragvon Leonidas » 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

Re: Encoding funktioniert nur interaktiv?

Beitragvon Darii » 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

Beitragvon oblivion » 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

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

Beitragvon Leonidas » 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

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]