Seite 1 von 1

griechischen Text einlesen und schreiben

Verfasst: Samstag 30. März 2013, 07:21
von ponc
Hi,

ich versuche griechischen Text aus einer XML Datei (odt) einzulesen und wieder an irgendeine Datei auszugeben, habe aber Probleme mit dem Umwandeln von Bytes, Strings und Codec.

Hier mal nicht funktionierender Beispielcode.
Ich bekomme für die Zeile mit 'write' den Fehler: UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-1: character maps to <undefined>

Code: Alles auswählen

message = "τὸ δὲ τοιᾶσδε ἢ τοιᾶσδε, οὐκέτι πᾶς, οὐδὲ τῶν αὐτῶν. διὸ φαίνεται ἡμέτερον εἶναι."
enc = 'utf-8'
data = message.encode(enc)
neueDatei = open("C:/Users/Homer/Desktop/dlltest/ausgabe.txt", 'w')
neueDatei.write(data.decode(enc))
neueDatei.close
Alle Beispiele, die ich über Google gefunden habe, haben mir bisher nicht geholfen.
Kann mir hier vielleicht jemand weiterhelfen?

Beste Grüße,
ponc

Re: griechischen Text einlesen und schreiben

Verfasst: Samstag 30. März 2013, 08:10
von ponc
ok, habe jetzt doch die lösung gefunden:

Code: Alles auswählen

import codecs
neueDatei = codecs.open("C:/Users/Homer/Desktop/dlltest/ausgabe.txt", 'w', 'utf-8')
Damit funktionierts.

Eine Möglichkeit, den griechischen Text in der Konsole anzuzeigen, gibt es aber nicht, oder?

ponc

Re: griechischen Text einlesen und schreiben

Verfasst: Samstag 30. März 2013, 09:05
von bwbg
Wenn es sich um eine Windows-Konsole handelt, kannst du mittels

Code: Alles auswählen

chcp 65001
die Codepage so anpassen, dass sie UTF-8 verwendet.

Grüße ... bwbg

Re: griechischen Text einlesen und schreiben

Verfasst: Samstag 30. März 2013, 12:16
von BlackJack
@ponc: Du hast in Deinem Beispiel die Datei übrigens nicht geschlossen. Einfach nur das `close`-Attribut vom Dateiobjekt abfragen reicht nicht, man muss die Methode dann auch *aufrufen*.

Re: griechischen Text einlesen und schreiben

Verfasst: Samstag 30. März 2013, 12:36
von cofi
In funktionierend (wenn du das coding cookie richtig setzt):

Code: Alles auswählen

message = u"τὸ δὲ τοιᾶσδε ἢ τοιᾶσδε, οὐκέτι πᾶς, οὐδὲ τῶν αὐτῶν. διὸ φαίνεται ἡμέτερον εἶναι."
enc = 'utf-8'
neueDatei = open("C:/Users/Homer/Desktop/dlltest/ausgabe.txt", 'w')
neueDatei.write(message.encode(enc))
neueDatei.close()
unicode -encode-> Bytestream
Bytestream -decode-> unicode

In Python willst du mit unicode Objekten arbeiten, an die Aussenwelt aber nur Bytestreams senden.

Bonuspunkte gibts fuer ``with``:

Code: Alles auswählen

message = u"τὸ δὲ τοιᾶσδε ἢ τοιᾶσδε, οὐκέτι πᾶς, οὐδὲ τῶν αὐτῶν. διὸ φαίνεται ἡμέτερον εἶναι."
enc = 'utf-8'
with open("C:/Users/Homer/Desktop/dlltest/ausgabe.txt", 'w') as neueDatei:
    neueDatei.write(message.encode(enc))