Einlesen und Schreiben von Sonderzeichen

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
de_tom
User
Beiträge: 15
Registriert: Dienstag 19. Juli 2016, 19:34

Hallo,

ich muss aus einer Datei Text einlesen, verarbeiten und in eine neue Datei schreiben. Der Text enthält neben normalen Schriftzeichen auch Sonderzeichen (Unicode) aller Art. Im folgenden Code ist ein solches Sonderzeichen beispielhaft in der Variablen 'text' enthalten:

Code: Alles auswählen

import codecs
text = "Hallo♥"
enc = "utf-8"
f = codecs.open("file.txt", "w", enc)
f.write(text)
f.close()
Die Ausgabe in 'file.txt" sieht leider so aus:

Code: Alles auswählen

Hallo♥
Was muss ich tun, damit das Zeichen 'korrekt' geschrieben wird?

Vielen Dank für Hilfe,
Tom
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@de_tom: der Text wird korrekt geschrieben. UTF8 ist ein multi-byte Encoding, das heißt, dass ein Zeichen durch mehrere Bytes dargestellt werden kann. Wie sonst sollte man über eine Million Zeichen mit Bytes, die 256 verschiedene Werte annehmen können, codieren?

Dein Problem ist, dass das Programm, das Du für die Anzeige des Dateiinhalts benutzt, nicht mit utf8-codierten Dateien zurechtkommt.
de_tom
User
Beiträge: 15
Registriert: Dienstag 19. Juli 2016, 19:34

@Sirius3:
Vielen Dank für die sehr schnelle Antwort! Du hast natürlich recht! Dass UTF-8 mehrere Bytes pro Zeichen verwendet (verwenden muss), war mir schon klar. Ich ging fälschlicherweise von einem "Fehler" im Code aus. Ich hätte eigentlich selbst drauf kommen können. In MS Excel (mit dem die geschriebenen Daten teilweise später eingelesen werden sollen) stellt das/die Zeichen korrekt dar. Das hätte ich eigentlich als erstes testen können.
Ist wohl nicht mein Tag...

Vielen Dank und sorry für meinen unnötigen Beitrtag.
Tom
Antworten