wie man Unicode Text in eine Datei schreiben kann ?

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
Gast

Hallo,

ich haben ein Problem mit dem Speicher vomText, den ich aus der XML-Parser bekommen habe. (ich weiß nicht, wie man mit codecs umgeht)

Die Fehlermeldung beim Speichern:

tmpfile = open("myfile_res", "w")
for txt in ch.fullNames:
tmpfile.write(txt)

File "basic_64.py", line 76, in ?
tmpfile.write(txt)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 18: ordinal not in range(128)

Ein Hinweis oder Tipps sind willkommen.

(BTW, ich wollte eigentlich HTML-Inhalt direkt durch XML parsen, aber ich weiß nicht, wie man das machen, deshalb habe ich zunächst den Text gespeichert und (im Buch gibt es Beispiel) geparsert. Vielleicht gibt es beim direkten Parser kein solches Problem, da ich den HTML-Inhalt mit der ähnlichen Methode den Text gespeichert.)

MfG

HL
BlackJack

XML Parser liefern in der Regel Unicode Objekte. Wenn Du ein Unicode Objekt speichern willst, dann musst Du es erst wieder in eine Zeichenkette umwandeln. Dazu musst Du es irgendwie kodieren. Wenn Du das nicht machst, dann versucht der Interpreter es normalerweise als ASCII zu kodieren, was in Deinem Fall nicht funktioniert. Versuch's doch mal mit:

Code: Alles auswählen

tmpfile.write(txt.encode('iso-8859-15'))
Statt 'iso-8859-15', wohl das gebräuchliste in Westeuropa, kannst Du natürlich auch eine andere Kodierung wählen.
Gast

Hallo Jack,
vielen Dank! das ist geil, du hast mein Leben gerettet.

Wenn du so gut informiert bist, vielleicht hast du eine Lösung für mein andere Problem:

ich will eigentlich keine Zwischendatei, aber wenn ich parseString(einString) verwende, bekomme ich die Fehlermeldung:

saxparser.parseString(protis)
AttributeError: ExpatParser instance has no attribute 'parseString'

(ja, klar, die Fehlermeldung ist einfache zu erklären :cry: )

der Codesegment sieht wie folgt:
ch = ArticleHandler()
saxparser = make_parser()
saxparser.setContentHandler(ch)
#saxparser.parse("myfile")
saxparser.parseString(protis)

aber bekomme ich keine Hilfe von Python-dokument!

Danke im voraus!

HL
BlackJack

Wenn eine Funktion ein Dateiobjekt erwartet, Du aber nur eine Zeichenkette hast, dann kannst Du diese mit der Klasse aus dem Modul `StringIO` als "Datei" zur Verfügung stellen.
Gast

Hallo BlackJack,

das war prima, ich danke dir. dies ist genau, was ich gesucht habe.

HL
Antworten