[Python-de] XML-Codierung

Georg Mischler schorsch at schorsch.com
Mit Dez 17 17:32:28 CET 2003


Andreas Grytz wrote:

> Im wesentlichen verstehe ich die Meldung so, dass versucht wird ein
> Unicode-Zeichen in ein ASCII-Zeichen umzuwandeln, es befindet sich
> allerdings außerhalb der ersten 128 Zeichen des 7-Bit
> ASCII-Zeichensatzes und ist deshalb nicht darstellbar.


>   def test_output(self):
>       self._out.write(len(self.title) * "-" + "\n")
>       self._out.write("%s\n".encode(self.encoding) % self.title)

Hier codierst du den String "%s\n" als iso-8859-1 (von einem
normalen String ausgehend ohnehin keine gute Idee), und
erst *anschliessend* interpolierst du mit self.title.
Das Resultat dieser Operation ist wieder Unicode, weshalb
das self._out.write() fehlschlägt.

Du musst also die Reihenfolge von Interpolation und
Codierung umdrehen:

>>> u = unicode('abcü', 'iso-8859-1')
>>> print "%s\n".encode('iso-8859-1') % u

Traceback (most recent call last):
  File "<stdin>", line 1, in ?
UnicodeError: ASCII encoding error: ordinal not in range(128)
>>> print ("%s\n" % u).encode('iso-8859-1')
abcü


-schorsch

-- 
Georg Mischler  --  simulations developer  --  schorsch at schorsch com
+schorsch.com+  --  lighting design tools  --  http://www.schorsch.com/