Seite 1 von 1

UTf-8-> Unicode-> Utf-8-> HTML-Datei, so richtig?

Verfasst: Donnerstag 22. März 2007, 16:46
von EnTeQuAk
Ich habe ma ne funny Frage... ich möchte bei dauCMS eine Datei einlesen und diese in 'unicode' umwandeln, für die Interne verarbeitung.

Sollte ja eigentlich kein Problem sein.
Ist es auch nicht ;) --> Das klappt wunderbar:

Code: Alles auswählen

def read_data(filename, charset='utf-8'):
    f = codecs.open(filename, 'r', charset)
    try:
        data = f.read()
        assert isinstance(data, unicode)
    finally:
        f.close()
    return data
Aber das schreiben macht Probleme:

Code: Alles auswählen

def write_data(filename, data, charset='utf-8'):
    #XXX: 'codecs.open'  || or normal 'open' ?
    f = open(filename, 'w')
    try:
        assert isinstance(data, unicode)
        f.write(data.encode(charset))
    finally:
        f.close()
Ich habe ansonsten nirgentwo im Code eine umwandlung der Strings...

Wenn ich mir nun die HTML-Datei anschaue, die ich schreibe bekomme ich anstatt:

Code: Alles auswählen

ööÖÖÖÖÖöööö
ääÄÄÄÄÄääää
üüÜÜÜÜÜüüüü
so nen Dreck:

Code: Alles auswählen

ööÖÖÖÖÖöööö
ääÄÄÄÄÄääää
üüÜÜÜÜÜüüüü 
Und das liegt sicherlich nicht an meinem Betriebssystem oder?

MfG EnTeQuAk

Verfasst: Donnerstag 22. März 2007, 17:08
von mitsuhiko
Firefox auf utf-8 einstellen. Dann funktioniert es. Also entweder content-type mit Encoding beim Absenden der Seite in den Header oder eine Mimetype Deklaration via META Tag.

Verfasst: Donnerstag 22. März 2007, 17:15
von EnTeQuAk
VERDAMMT! --> Warum muss die Welt so einfach sein? ;)

Herzlichen Dank :)

Boa das lößt jetzt genau vier Probleme bei mir ;)


(und ansonsten der Code oben ist i.o, ja?)


MfG EnTeQuAk

Verfasst: Donnerstag 22. März 2007, 17:18
von Leonidas
Wofür bauchst du die Asserts? Um Ducktyping zu verhindern und unklare Fehlermeldungen zu produzieren?

Verfasst: Donnerstag 22. März 2007, 17:30
von EnTeQuAk
Die waren nur da, um auch zu schauen, ob die Umwandlungen auch wirklich geklappt haben... so etwas ist zum testen meißt gar net so schlecht (gut absichtliche Fehlermeldungen sind da auch gut ;) )

Sie sind im Finalen Code allerdings entfernt worden ;)


MfG EnTeQuAk

Verfasst: Freitag 23. März 2007, 09:20
von jens
Die assert Prüfungen sind doch gar nicht so verkehrt... Sie sollten aber schon noch einen gescheiten Hinweis liefern. IMHO ist es z.B. auch für einen Selber gut, das zu überprüfen.

Bei write_data() würde ich allerdings vor dem öffnen Prüfen ;)

Re: UTf-8-> Unicode-> Utf-8-> HTML-Datei, so richti

Verfasst: Freitag 23. März 2007, 11:48
von gerold
EnTeQuAk hat geschrieben:

Code: Alles auswählen

def read_data(filename, charset='utf-8'):
    f = codecs.open(filename, 'r', charset)
    try:
        data = f.read()
        assert isinstance(data, unicode)
    finally:
        f.close()
    return data
Hi EnTeQuAk!

Ich finde ``assert`` in einigen Fällen recht gut und setze es auch gerne mal ein, aber in diesem Fall ist es nicht notwendig.

``codecs.open`` liefert per Definition Unicode zurück. Dafür wurde es programmiert. Das nachträgliche Prüfen, ob auch wirklich Unicode zurück geliefert wurde, bringt nicht viel.

mfg
Gerold
:-)

PS: Ich wollte nur meinen Senf dazu geben. :mrgreen:

Verfasst: Freitag 23. März 2007, 12:36
von EnTeQuAk
Ja... wie gesagt ;) --> Doppelt hält besser :)


Also ich habe nun das Thema ansich wunderbar hinbekommen... ich dachte immer, das ganze währe komplizierter ;) --> Aber wenn man die eingebauten Sachen von ''codecs'' nimmt is es ja wunderbärchen ;)


Eine kleine Frage hätte ich da aber noch.

Bei 'write_data' --> es funktioniert ja so auch... aber wenn ich ''codecs'' einen unicodestring gebe, eine Datei mit

Code: Alles auswählen

f = codecs.open(filename, 'w', 'utf-8')
öffne... schreibt er dann nicht automatisch in UTF-8 ?

Dann bräuchte ich doch rein theoretisch die Daten nicht auch noch encodieren oder?

Ist nur ne vermutung... kanns hier grad net ausprobieren... bin leider erst ca. 20 UHR heute zu hause *heul*

Ansonsten wünsche ich allen einen erholsamen Feierabend ;)
(denn "Freitag ab eins, macht jeder Seins :) )

MfG EnTeQuAk

Verfasst: Freitag 23. März 2007, 12:45
von gerold
EnTeQuAk hat geschrieben:wenn ich ''codecs'' einen unicodestring gebe,
[...]
schreibt er dann nicht automatisch in UTF-8 ?
Hi EnTeQuAk!

Ja, Unicode wird automatisch umgewandelt.

mfg
Gerold
:-)