Textcodierung ich blick nicht mehr durch.

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
eiwolf
User
Beiträge: 9
Registriert: Mittwoch 16. August 2006, 11:10

Montag 28. August 2006, 15:19

ich möchte einen strin z.B.:

Code: Alles auswählen

text1 = "\n\n\n  hallo Welt \n\n"
gerne mit Hilfe von:

Code: Alles auswählen

        f = codecs.open(TestPath,"w","iso-8859-1")
        f.write(text1)
        f.close()
schreiben.

Leider werden dann die Zeilenümbrüche nicht erkannt.

Mein Versuch:

Code: Alles auswählen

        text1 = "\n\n\n  hallo Welt \n\n"
        print type(teststring)
        text2 = text1.decode("ascii")
        text3 = text2.encode("iso-8859-1")
        text1 = text3
funktionierte leider auch nicht. Was mache ich falsch.

Danke für euere Hilfe.

MFG
Wolfgang
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 28. August 2006, 15:58

Hallo Wolfgang!

Du musst an ``f.write()`` in deinem Fall einen Unicode-String übergeben. Also so:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

text1 = u"\n\n\n  hallo Welt \n\n"
f = codecs.open(TestPath, "w", "iso-8859-1")
f.write(text1)
f.close()
Weitere Informationen findest du evt. hier: http://www.python-forum.de/topic-5095.html

Aahhh! Jetzt weiß ich was dein Problem ist.

help(codecs.open):
Files are always opened in binary mode, even if no binary mode
was specified. This is done to avoid data loss due to encodings
using 8-bit values. The default file mode is 'rb' meaning to
open the file in binary read mode.
Es nützt also nichts, einfach den Modus mit "w" anzugeben. Intern wird daraus ein "wb", was die automatische Umwandlung der Zeilenumbrüche ausschaltet.

Das kannst du umgehen, indem du aus "\n" ein "\r\n" machst.

Code: Alles auswählen

text1 = u"\n\n\n  hallo Welt \n\n".replace("\n", "\r\n")
Die Zeilenumbrüche wären schon da, nur zeigt sie dein Editor nicht an, da dieser evt. nur mit "\r\n" umgehen kann. Typisch Windows. Nicht mal einen Editor mit dabei, der mit verschiedenen Zeilenumbrüchen umgehen kann.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten