Seite 1 von 1

Textcodierung ich blick nicht mehr durch.

Verfasst: Montag 28. August 2006, 15:19
von eiwolf
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

Re: Textcodierung ich blick nicht mehr durch.

Verfasst: Montag 28. August 2006, 15:58
von gerold
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
:-)