Unicode, wie macht ihrs?

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
Benutzeravatar
crackpod_
User
Beiträge: 40
Registriert: Mittwoch 3. Dezember 2008, 21:46

Samstag 20. Dezember 2008, 21:38

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
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Samstag 20. Dezember 2008, 22:20

Was soll das Ziel von dem Code sein? :roll:
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Benutzeravatar
crackpod_
User
Beiträge: 40
Registriert: Mittwoch 3. Dezember 2008, 21:46

Sonntag 21. Dezember 2008, 01:18

veers hat geschrieben:Was soll das Ziel von dem Code sein? :roll:
Steht im ersten Beitrag. :roll:
DasIch
User
Beiträge: 2480
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Sonntag 21. Dezember 2008, 01:24

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?
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Sonntag 21. Dezember 2008, 02:48

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.
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Sonntag 21. Dezember 2008, 10:06

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
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sonntag 21. Dezember 2008, 14:15

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Sonntag 21. Dezember 2008, 14:21

Damit könnte ich leben, aber der C64 hat auch '\r' als Zeilenende verwendet. *<:o)
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Sonntag 21. Dezember 2008, 18:55

Nicht zu vergessen der Apple II. Wer's ganz genau wissen will...

Stefan
Antworten