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:
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.

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
ö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
