Guten Abend, es ist wahrscheinlich sehr einfach, aber ich komme nicht drauf wie kann ich folgenden unicode String in eine Datei schreiben. u'Die \xc4pfel sind reif' Ich habe mit f = file("pfad") die Datei geöffnet, wenn ich jetzt die obige Zeile mit f.write(u'Die \xc4pfel sind reif') schreiben will bekomme ich folgenden Traceback: UnicodeEncodeError: 'ascii' codec can't encode character u'\xc4' in position 4: ordinal not in range(128) Wie kann ich jetzt das Encoding der Datei einstellen? Danke im voraus mfg Albert _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
On 04.Mär 2005 - 22:20:37, Albert Hermeling wrote:
Guten Abend,
es ist wahrscheinlich sehr einfach, aber ich komme nicht drauf wie kann ich folgenden unicode String in eine Datei schreiben.
u'Die \xc4pfel sind reif'
Ich habe mit f = file("pfad") die Datei geöffnet, wenn ich jetzt die obige Zeile mit f.write(u'Die \xc4pfel sind reif') schreiben will bekomme ich folgenden Traceback:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xc4' in position 4: ordinal not in range(128)
Wie kann ich jetzt das Encoding der Datei einstellen?
Soweit ich sehe gar nicht. Aber ich denke du willst kein Textfile öffnen, sondern ein Binärfile, also mode=w|b . Ausserdem haben File Objekte ein Attribut encoding welches die Kodierung angibt. Mehr dazu findest du bestimmt in der Python-Lib-Doku.... Ansonsten gibts im codecs Modul einen open-Befehl mit encoding Angabe... Andreas -- Future looks spotty. You will spill soup in late evening. _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Albert Hermeling wrote:
Ich habe mit f = file("pfad") die Datei geöffnet, wenn ich jetzt die obige Zeile mit f.write(u'Die \xc4pfel sind reif') schreiben will bekomme ich folgenden Traceback:
import codecs f = codecs.open("pfad","w","utf8") f.write(....) Gruß, Achim _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Am Samstag, 5. März 2005 01:33 schrieb Achim Domma (Procoders): Guten Morgen,
Albert Hermeling wrote:
Ich habe mit f = file("pfad") die Datei geöffnet, wenn ich jetzt die
import codecs f = codecs.open("pfad","w","utf8") f.write(....)
Vieleicht liegt es an meiner Erkältung ;-( aber ich komme mit Unicode einfach nicht zurecht und das Nervt mich jetz schon seit 5 Stunden! Hier mein Problem: import codecs f = codecs.open("/programmieren/unico/unicode_test.txt","wb","utf8") f.write("\xdc") Traceback (most recent call last): File "<pyshell#5>", line 1, in -toplevel- f.write("\xdc") File "/usr/local/lib/python2.4/codecs.py", line 434, in write return self.writer.write(data) File "/usr/local/lib/python2.4/codecs.py", line 178, in write data, consumed = self.encode(object, self.errors) UnicodeDecodeError: 'ascii' codec can't decode byte 0xdc in position 0: ordinal not in range(128) print "\xdc" Ü Das sollte doch eigentlich funktionieren oder? Gute Nacht Albert _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Albert Hermeling wrote:
Hier mein Problem:
import codecs f = codecs.open("/programmieren/unico/unicode_test.txt","wb","utf8") f.write("\xdc")
[...]
Das sollte doch eigentlich funktionieren oder?
Nein. Die Gänsefüßchen bedeuten in Python "byte string", also Folge von Zahlen zwischen 0 und 255. Eine mit codecs.open geöffnete Datei erwartet aber "unicode string", also eine Folge von Zahlen zwischen 0 und sys.maxunicode. Literale dieses Datentyps beginnen mit 'u', also import codecs f = codecs.open("/programmieren/unico/unicode_test.txt","wb","utf8") f.write(u"\xdc") Ciao, Martin P.S. Versucht man, einen byte string in einen Unicode-Stream zu schreiben, so wird der byte string zunächst automatisch mit Hilfe von sys.getdefaultencoding() umgewandelt, um dann wieder mittels "utf8" in einen byte string zurückkonvertiert und in die Datei geschrieben zu werden. Das system default encoding ist normalerweise "us-ascii", also liefert Dein Code einen Fehler in der ASCII-Konvertierung. _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
import codecs f = codecs.open("/programmieren/unico/unicode_test.txt","wb","utf8") f.write("\xdc")
Da fehlt ein u vor "\xdc", also: f.write(u"\xdc") Hier, was mein Interpreter dazu sagt:
f = codecs.open("unicode_test.txt","w","utf8") f.write("\xdc") Traceback (most recent call last): File "<stdin>", line 1, in ? File "/usr/lib/python2.3/codecs.py", line 400, in write return self.writer.write(data) File "/usr/lib/python2.3/codecs.py", line 178, in write data, consumed = self.encode(object, self.errors) UnicodeDecodeError: 'ascii' codec can't decode byte 0xdc in position 0: ordinal not in range(128) f.write(u"\xdc") f.close()
Hintergrund: Erst das u vor dem String erzeugt bzw. erzwingt einen Python-Unicode-String. Per default benutzt Python für Strings kein Unicode. Meines Erachtens hat Java dieses Problem besser gelöst (alles erstmal UTF-8), aber mit dem kleinen u kann man eigentlich auch leben. Gute Nacht, Mirko _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
--On Freitag, 4. März 2005 22:20 Uhr +0100 Albert Hermeling <Albert.Hermeling@t-online.de> wrote:
Guten Abend,
es ist wahrscheinlich sehr einfach, aber ich komme nicht drauf wie kann ich folgenden unicode String in eine Datei schreiben.
u'Die \xc4pfel sind reif'
Ich habe mit f = file("pfad") die Datei geöffnet, wenn ich jetzt die obige Zeile mit f.write(u'Die \xc4pfel sind reif') schreiben will bekomme ich folgenden Traceback:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xc4' in position 4: ordinal not in range(128)
Einen Unicode String in eine Datei zu schreiben macht keinen Sinn. Eine Datei ist nicht anderes als ein Binärstream. D.h. Du konvertierst den Unicode String in irgendein Encoding - z.B. UTF8 - und schreibst diesen in die Datei. -aj _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
participants (6)
-
"Martin v. Löwis" -
Achim Domma (Procoders) -
Albert Hermeling -
Andreas Jung -
Andreas Pakulat -
Mirko