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

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

Beitragvon EnTeQuAk » Donnerstag 22. März 2007, 16:46

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

Beitragvon mitsuhiko » Donnerstag 22. März 2007, 17:08

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:

Beitragvon EnTeQuAk » Donnerstag 22. März 2007, 17:15

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

Beitragvon Leonidas » Donnerstag 22. März 2007, 17:18

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

Beitragvon EnTeQuAk » Donnerstag 22. März 2007, 17:30

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
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Freitag 23. März 2007, 09:20

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

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

Beitragvon gerold » Freitag 23. März 2007, 11:48

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:

Beitragvon EnTeQuAk » Freitag 23. März 2007, 12:36

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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Freitag 23. März 2007, 12:45

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.

Wer ist online?

Mitglieder in diesem Forum: Holger Chapman