Seite 1 von 1
Unicode, wie macht ihrs?
Verfasst: Samstag 20. Dezember 2008, 21:38
von crackpod_
Hallo, Ich habe mal ein bisschen rumgetestet wie man relativ einfach Dateien mit einem bestimmten encoding öffnen kann. Dabei habe ich es z.b einmal so gelöst:
Code: Alles auswählen
print open("test.txt").read().decode("utf-8").encode("utf-8")
Oder auch so:
Code: Alles auswählen
print codecs.open("test.txt", encoding="utf-8").read().encode("utf-8")
Kennt ihr noch bessere Wege? Von dem was ich gelesen habe sollte das ja kein so großes Problem mehr sein mit den Encodings ab Python 3.0 oder?
crackpod
Verfasst: Samstag 20. Dezember 2008, 22:20
von veers
Was soll das Ziel von dem Code sein?

Verfasst: Sonntag 21. Dezember 2008, 01:18
von crackpod_
veers hat geschrieben:Was soll das Ziel von dem Code sein?

Steht im ersten Beitrag.

Verfasst: Sonntag 21. Dezember 2008, 01:24
von DasIch
Schonmal daran gedacht dass dich veers damit darauf aufmerksam machen wollte das ein Code genau gar nichts tut außer die CPU sinnlos zu beschäftigen?
Verfasst: Sonntag 21. Dezember 2008, 02:48
von veers
DasIch hat geschrieben:Schonmal daran gedacht dass dich veers damit darauf aufmerksam machen wollte das ein Code genau gar nichts tut außer die CPU sinnlos zu beschäftigen?
Und eine Exception werfen, falls das nicht utf-8 encoded ist. Aber ich denke nicht das du Encodings validieren willst.
Re: Unicode, wie macht ihrs?
Verfasst: Sonntag 21. Dezember 2008, 10:06
von sma
crackpod_ hat geschrieben:Hallo, Ich habe mal ein bisschen rumgetestet wie man relativ einfach Dateien mit einem bestimmten encoding öffnen kann.
Es sollte klar sein, dass das letzte `encode` wenig sinnvoll ist, da dies aus dem String, den du lesen wolltest, ja wieder ein bytes-Array macht. Darauf ritten ja schon die anderen Antworter herum.
Ansonsten ist leider keine der beiden Alternativen wirklich befriedigend. Die erste hat den Nachteil, dass du dir die ganze Datei in den Hauptspeicher saugst und sie dort konvertierst, was dann mindestens nochmal so viel Hauptspeicher kostet. Zweitens lädst du die Datei nicht im Binärmodus, was zwar das plattformspezifische Zeilenendzeichen in '\n' konvertiert, aber nicht für jedes Encoding (etwa UTF-16) funktioniert.
Die andere Alternative ist wahrscheinlich speichersparender, doch sie konvertiert laut Dokumentation niemals das betriebssystemspezifische Zeilenendzeichen in '\n'. Dafür kann man da das "b" im Mode auch nicht vergessen, weil es immer angefügt wird.
Ich würde wohl `codecs.open` benutzen und mich ärgern, jetzt mit \r, \n und \r\n klarkommen zu müssen. Bei \r alleine versagt leider readline() und readlines(). Das mag aber in heutiger Zeit egal sein.
Stefan
Re: Unicode, wie macht ihrs?
Verfasst: Sonntag 21. Dezember 2008, 14:15
von Leonidas
sma hat geschrieben:Ich würde wohl `codecs.open` benutzen und mich ärgern, jetzt mit \r, \n und \r\n klarkommen zu müssen. Bei \r alleine versagt leider readline() und readlines(). Das mag aber in heutiger Zeit egal sein.
Ja, kommen sowieso nur in alten Mac OS < X Versionen in Textdateien vor und davon gbt es nicht so viele.
Verfasst: Sonntag 21. Dezember 2008, 14:21
von BlackJack
Damit könnte ich leben, aber der C64 hat auch '\r' als Zeilenende verwendet. *<:o)
Verfasst: Sonntag 21. Dezember 2008, 18:55
von sma
Nicht zu vergessen der Apple II.
Wer's ganz genau wissen will...
Stefan