[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