griechischen Text einlesen und schreiben

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
ponc
User
Beiträge: 5
Registriert: Sonntag 24. März 2013, 17:46

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
ponc
User
Beiträge: 5
Registriert: Sonntag 24. März 2013, 17:46

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
Benutzeravatar
bwbg
User
Beiträge: 407
Registriert: Mittwoch 23. Januar 2008, 13:35

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
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
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*.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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))
Antworten