Seite 1 von 1

# -*- coding: iso-8859-1 -*-

Verfasst: Donnerstag 18. Juli 2013, 17:36
von 89PM
Hi, ich habe gerade erst begonnen mir das Programmieren beizubringen und bin daher noch ein blutiger Anfänger.
Ich habe folgendes Problem:
Ich habe als Beispiel folgendes kleines Programm geschrieben:

langer_String = '''Alle meine Entchen
schwimmen auf dem See.
Köpfchen in das Wasser.
Schwänzchen in die Höh.'''

wenn ich das Programm nun starte erkennt es alle Umlaute logischerweise nicht, daher habe ich den code # -*- coding: iso-8859-1 -*-
ganz an den Anfang eingefügt.


# -*- coding: iso-8859-1 -*-
langer_String = '''Alle meine Entchen
schwimmen auf dem See.
Köpfchen in das Wasser.
Schwänzchen in die Höh.'''

Aber als ich es startete fuktioniertren die äs,ös und üs immer noch nicht ('''...xf6pfchen in das Wasser, \nSchw\xe4nzchen in die H\xf6h.''').
Könnt ihr mir sagen wo das Problem liegt?
Das wäre sehr nett.

Re: # -*- coding: iso-8859-1 -*-

Verfasst: Donnerstag 18. Juli 2013, 17:45
von BlackJack
@89PM: Was heisst „funktionieren nicht”? Du machst mit `langer_String` ja nichts weiter. Heisst das es gibt eine Fehlermeldung vom Compiler? Das kann eigentlich nicht mehr sein.

Falls Du doch etwas mit der Zeichenkette machst, dann ist die Frage welche Python-Version, passt die Kodierungsangabe zur tatsächlichen Kodierung der Textdatei, und was machst Du denn mit der Zeichenkette?

Re: # -*- coding: iso-8859-1 -*-

Verfasst: Donnerstag 18. Juli 2013, 17:52
von kbr
89PM hat geschrieben:Aber als ich es startete fuktioniertren die äs,ös und üs immer noch nicht.
Du musst darauf achten, die Datei mit der gleichen Kodierung zu speichern, wie Du Python mittels der coding-Zeile mitteilst. Ein guter Editor erlaubt Dir das. Und dann solltest Du am besten 'utf-8' wählen.

Re: # -*- coding: iso-8859-1 -*-

Verfasst: Freitag 19. Juli 2013, 15:50
von Hyperion
kbr hat geschrieben:Du musst darauf achten, die Datei mit der gleichen Kodierung zu speichern, wie Du Python mittels der coding-Zeile mitteilst. Ein guter Editor erlaubt Dir das. Und dann solltest Du am besten 'utf-8' wählen.
Man muss darüber hinaus noch aufpassen, inwiefern das anzeigende Element (Shell, Testdatei, usw) diese Codierung auch darstellen / interpretieren kann ;-) Das könnte durchaus das Problem beim OP sein! Ich denke nicht, dass die Windows cmd utf-8 versteht, oder?

@89PM: Schau Dir mal die Links in meiner Signatur an - wenn Du Dir die durchgelesen hast, wirst Du anfangen zu verstehen, was es mit Encodings so auf sich hat.

Re: # -*- coding: iso-8859-1 -*-

Verfasst: Freitag 19. Juli 2013, 17:59
von Leonidas
Hyperion hat geschrieben:Ich denke nicht, dass die Windows cmd utf-8 versteht, oder?
Laut SO schon, aber das ist schon ein gewisser Mehraufwand, ja.

Re: # -*- coding: iso-8859-1 -*-

Verfasst: Montag 22. Juli 2013, 18:13
von Hellstorm
Hyperion hat geschrieben:Ich denke nicht, dass die Windows cmd utf-8 versteht, oder?
Also zumindest Umlaute gehen ohne Probleme:

Code: Alles auswählen

print("Hällo")
dann cmd gestartet:

Code: Alles auswählen

E:\>python test.py
Hällo!
Fertig. Keine Probleme. :K Nur bei Sachen, die sich wohl nicht in diese Windows-Kodierung umwanden lassen (kA wie die heißt), geht es nicht:

Code: Alles auswählen

print("日本語")

Code: Alles auswählen

E:\>python test.py
Traceback (most recent call last):
  File "test.py", line 1, in <module>
    \ufeffprint("\u65e5\u672c\u8a9e")
  File "C:\Programmieren\Python33\lib\encodings\cp850.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-2: character maps to <undefined>

Re: # -*- coding: iso-8859-1 -*-

Verfasst: Dienstag 23. Juli 2013, 00:01
von Leonidas
Das hat ja alles nichts mit UTF-8 zu tun, das zeigt nur dass Python offenbar korrekt in CP-1215 konvertiert, welches offenbar von deiner Shell erwartet wird.

Re: # -*- coding: iso-8859-1 -*-

Verfasst: Dienstag 23. Juli 2013, 07:54
von BlackJack
{"Konrinthenkackermodus": "cp850"}

(Ich wollte das mal mit JSON auszeichnen, statt (Pseudo-)XML :-))