[Python-Dev] sys.stdout.write encoding failure

Amaury Forgeot d'Arc amauryfa at gmail.com
Mon Dec 15 09:47:31 CET 2008


Hi,

Alexander Belopolsky wrote:
> There is currently a unit test in the trunk that fails in verbose mode:
>
> $ ./python.exe Lib/test/test_doctest.py -v
> ...
> UnicodeEncodeError: 'ascii' codec can't encode characters in position
> 338-339: ordinal not in range(128)
>
> Apparently, the problem is that stdout cannot encode non-ascii characters:
>
>>>> sys.stdout.write(u'f\xf6\xf6')
> Traceback (most recent call last):
>  File "<stdin>", line 1, in <module>
> UnicodeEncodeError: 'ascii' codec can't encode characters in position
> 1-2: ordinal not in range(128)
>
> which is strange because
>
>>>> sys.stdout.encoding
> 'UTF-8'
>
> and print has no problem with the same string:
>>>> print u'f\xf6\xf6'
> föö
>
>
> Where does  'ascii' codec come from?

It's sys.getdefaultencoding default value.

sys.stdout.write() expects a bytes string. What you see here is the
coercion of the unicode to a string.

-- 
Amaury Forgeot d'Arc


More information about the Python-Dev mailing list