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

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
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

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
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

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.
TUFKAB – the user formerly known as blackbird
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Wofür bauchst du die Asserts? Um Ducktyping zu verhindern und unklare Fehlermeldungen zu produzieren?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

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
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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:
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten