[Python-de] print von Nicht-ASCII-Zeichen

Alexander 'boesi' Bösecke boesi.josi at gmx.net
Mon Aug 28 20:59:52 CEST 2006


Hi

Am 28.08.2006 17:41:28 schrieb Diez B. Roggisch:
 
> Was aber auf jeden Fall klappen sollte: sys.stdout durch einen encoding-stream 
> aus dem codecs modul zu ersetzen. Dann sollte das unter allen Umstaenden 
> gehen.
> 
> Also etwa so in der Art:
> 
> sys.stdout = codecs.EncodedFile(sys.stdout, data_encoding="utf-8", 
> errors="foo")

Wenn ich in die beiden oben geposteten Skripte das einfüge:

---snip---
import sys, codecs
sys.stdout = codecs.EncodedFile(sys.stdout, data_encoding='utf8', file_encoding='utf8', errors='replace')
---snap---

... bekomme ich folgenden Fehler:

---snip---
Traceback (most recent call last):
  File "only_w32.py", line 8, in ?
    print u'+ñ'
  File "c:\tools\python\Lib\codecs.py", line 508, in write
    data, bytesdecoded = self.decode(data, self.errors)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 0: ordinal not in range
(128)
---snap---

Wie kommt da der ascii codec hin? Ich hab doch utf8 angegeben, oder
nicht?

> Das foo ist natuerlich unsinn - aber ich finde im Moment nicht die moeglichen 
> Werte ausser dem default strict - welcher an dieser Stelle fuer 
> debugging-Zwecke vielleicht duerch eine relaxtere Variante ersezts werden 
> sollte.

aus der Python-Doku zu codecs.register():
---snip---
Possible values for errors are 'strict' (raise an exception in case of
an encoding error), 'replace' (replace malformed data with a suitable
replacement marker, such as "?"), 'ignore' (ignore malformed data and
continue without further notice), 'xmlcharrefreplace' (replace with the
appropriate XML character reference (for encoding only)) and 'backslashreplace'
(replace with backslashed escape sequences (for encoding only)) as well
as any other error handling name defined via register_error(). 
---snap---


cu boesi

PS: Den Traceback bekomm ich natürlich nur zu sehen, wenn ich python.exe
verwende. Bei pythonw.exe seh ich wie gehabt nix, aber das Verhalten ist
das gleiche.
-- 

<THammY-> und meine hände ham bisher immer
nur das gemacht was ich will </THammY>



More information about the python-de mailing list