What is file.encoding convention?

Naoki INADA songofacandy at gmail.com
Thu Jul 23 20:49:26 EDT 2009


>  What is the encoding of sys.stderr in your example?
Sorry, I missed. It is cp932

> So the problem is essentially this: if a stream has an encoding
> attribute, sometimes it is a wrapped stream which encodes Unicode
> (e.g. a stream obtained via the codecs module) and sometimes it is not
> (e.g. sys.stdout, sys.stderr).

Yes! I confused by it.

>> The encoding that this file uses. When Unicode strings are written to a file,
>>  they will be converted to byte strings using this encoding. In addition,
>> when the file is connected to a terminal, the attribute gives the encoding
>> that the terminal is likely to use

I feel this doc means "file object with encoding attribute encodes
unicode
regardless it is tty or not" and sys.stdout/stderr defies convention.

If this doc means "file object encodes unicode if it isn't tty.", I
should write
like below::

if not afile.isatty():
    if getattr(afile, "encoding") is not None:
        afile.write(unicode_str)
elif getattr(afile, "encoding") is not None:
    afile.write(unicode_str.encode(afile.encoding))
else:
    afile.write(unicode_str.encode(fallback_encoding)) # utf8,
defaultencoding, preferedencoding, ...


"Writing unicode to a file(-like)" is a simple requirement.
Does python have any simple resolution for it?



More information about the Python-list mailing list