Seite 1 von 2
Unicode ordinal not in range (128)
Verfasst: Dienstag 30. März 2004, 14:50
von MaVoj
Hallo,
ich habe momentan ein Problem mit dem Zeichensatz in Python. Bei einigen Funktionsaufrufen kommt es zu der Fehlermeldung "UnicodeError: ASCII decoding error: ordinal not in rang(128).
Bisher ersetzte ich die ASCII-Zeichen > 127 durch ein bekanntes Zeichen (?). Da dies aber nur eine Krücke ist, wollte ich den Zeichensatz ändern. Da ich dies aber noch nicht hinbekommen habe, meine Frage. Wie kann ich Zeichen > 127 in Funktionen bearbeiten? Meine aufzurufende Funktion ist "*.toxml". Kann man die Codierung angeben?
Verfasst: Dienstag 30. März 2004, 18:38
von hans
Womit arbeitest du? QT? QTStrings kannst du mit der Funktion local8bit() konvertieren.
Aber sag erst einmal, was du einsetzt, sonst raten wir hier nur unnötig rum.
Hans
Verfasst: Dienstag 30. März 2004, 18:48
von hans
Ich trage hier die Antwort von fs111 aus dem gesperrten Thread nach, damit es die Nachwelt einfacher hat
fs111 schrieb
Vermutlich arbeitest Du mit XML-Dateien, dann solltest Du in der Deklaration von xml den Zeichensatz explizit auf iso-8859-1(5) umstellen, dann sollte das nicht mehr passieren. Hatte ich auch schon mal das Problem und bin halb wahnsinnig geworden. Nach der Umstellung ging es völlig problemlos.
HTH
Grüße fs111
Verfasst: Dienstag 30. März 2004, 19:21
von fs111
Kann man denn mit PHPBB keine Threads verschieben?
fs111
Verfasst: Dienstag 30. März 2004, 19:30
von Milan
Hi. Ja, du kannst Threads verschieben, aber keine einzelnen Beiträge (ist zumindest für mich nicht möglich)...
@MaVoj: Ja, wie es Hans schreibt, wäre es ganz nützlich zu wissen woher die Strings kommen und wie sie bearbeitet werden sollen. So kann ich dir leider auch nicht helfen...
Milan
Verfasst: Mittwoch 31. März 2004, 09:36
von Gast
Ich fülle ein "dom_main" (createElement; createTextNode) und erhalte den Fehler beim Aufruf von "strxml = str(dom_main.toxml())". dom_main.createTextNode(Info) übergeben ich den Wert mit den Sonderzeichen!
Verfasst: Mittwoch 31. März 2004, 10:15
von fs111
Hast Du meinen Tipp ausprobiert?
fs111
Verfasst: Mittwoch 31. März 2004, 12:53
von MaVoj
Hi fs111,
fs111 hat geschrieben:Hast Du meinen Tipp ausprobiert?
fs111
Wo kann ich denn die "Deklaration von xml den Zeichensatz explizit auf iso-8859-1(5) umstellen"?
Verfasst: Mittwoch 31. März 2004, 13:13
von fs111
muss in der ersten Zeile des Dokumentes stehen. Wenn kein Zeichensatz angegeben wird, wird standardmäßig von UTF-8 ausgegangen, und das führt dann zu Problemen.
fs111
Verfasst: Mittwoch 31. März 2004, 13:23
von MaVoj
Danke für die Info. Diese Textzeile steht an erster Position. Allerdings habe ich "iso" klein geschrieben! Ist das ein Problem?
Verfasst: Mittwoch 31. März 2004, 14:18
von fs111
Ich glaube das muss groß sein, teste es einfach mal.
fs111
Verfasst: Donnerstag 1. April 2004, 11:25
von MaVoj
Hi fs111,
hat leider auch mit der Großschreibung nicht funktioniert. Hast du eventuell noch einem Tipp auf Lager?
Verfasst: Freitag 2. April 2004, 10:05
von fs111
Hmm, welche XML-Implementierung benutzt Du denn?
fs111
Verfasst: Freitag 2. April 2004, 12:29
von MaVoj
Aus der 'minidom.py' die Funktion 'toxml' und von dort widerum 'writexml'. In diesem 'minidom.writexml' steht der Eintrag 'writer.write('<?xml version="1.0" ?>\n')'. Sollte ich diesen mal durch '<?xml version="1.0" encoding="ISO-8859-1"?>' ersetzen?
Verfasst: Freitag 2. April 2004, 12:58
von Dookie
Hi MaVoj,
damit sollte es laufen, ich würde aber bei xml immer mit Unicode arbeiten und im Programm dann die Bildschirmausgaben abhängig von den Einstellungen des Rechners Codieren.
Hier noch ein interessanter Link.
http://p-nand-q.com/python/unicode_faq.html
Gruß
Dookie
Verfasst: Freitag 2. April 2004, 14:53
von fs111
Dookie hat geschrieben:Hi MaVoj,
damit sollte es laufen, ich würde aber bei xml immer mit Unicode arbeiten und im Programm dann die Bildschirmausgaben abhängig von den Einstellungen des Rechners Codieren.
Hier noch ein interessanter Link.
http://p-nand-q.com/python/unicode_faq.html
Gruß
Dookie
Das ist ja löblich immer mit Unicode arbeiten zu wollen, damit fliegt man aber bei XMl schnell auf die Nase, wie wir hier ja sehen können.
fs111
Verfasst: Freitag 2. April 2004, 15:35
von MaVoj
Ich möchte ungern die Original Bibliothek abändern, da ich nach Neuinstallationen diese wieder nachpflegen müßte. Wie kann ich denn die minidom.py (aus meinem Arbeitsverzeichnis) in meine Dateieinbinden ohne dass stets auf das Installationsverzeichnis (..\Python\Lib\xml\dom) zugegriffen wird? Kann ich beim Import den Pfad angegeben? Wie wird 'minidom' überhaupt eingebunden. Selbst wenn ich 'from xml.dom.minidom import Document, parseString, parse' lösche, kann ich mit 'dom_main' auf 'toxml' zugreifen!
Verfasst: Freitag 2. April 2004, 15:49
von fs111
Kann man denn den minidom im Konstruktor nicht das encoding übergeben? Das kann ich mir ja fast nicht vorstellen...
fs111
Verfasst: Freitag 2. April 2004, 17:26
von Dookie
hi fs111,
eben nicht, Unicode ist bei xml standart, wenn kein anderes encoding angegeben wird in der ersten Zeile, und dann liegts am Programm/Parser das Encoding auszuwerten.
Gruß
Dookie
Verfasst: Samstag 3. April 2004, 10:40
von fs111
Dookie hat geschrieben:hi fs111,
eben nicht, Unicode ist bei xml standart, wenn kein anderes encoding angegeben wird in der ersten Zeile, und dann liegts am Programm/Parser das Encoding auszuwerten.
Gruß
Dookie
das weiß ich auch, nur wenn Dein System kein Unicode als Standardzeichensatz hat, sondern bspw. Iso-8859-15, dann kommt es zu solchen Fehlern, wie wir hier sehen. Das habe ich schon öfter beobachtet, und zwar sowohl unter Python als auch unter Java.
fs111