Unicode, stdout, and stderr
wxjmfauth at gmail.com
wxjmfauth at gmail.com
Tue Jul 22 03:07:18 EDT 2014
Le mardi 22 juillet 2014 08:18:08 UTC+2, Frank Millman a écrit :
> Hi all
>
>
>
> This is not important, but I would appreciate it if someone could explain
>
> the following, run from cmd.exe on Windows Server 2003 -
>
>
>
> C:\>python
>
> Python 3.4.1 (v3.4.1:c0e311e010fc, May 18 2014, 10:38:22) [MSC v.1600 32 bit
>
> (In
>
> tel)] on win32
>
> Type "help", "copyright", "credits" or "license" for more information.
>
> >>> x = '\u2119'
>
> >>> x # this uses stderr
>
> '\u2119'
>
> >>> print(x) # this uses stdout
>
> Traceback (most recent call last):
>
> File "<stdin>", line 1, in <module>
>
> File "C:\Python34\lib\encodings\cp437.py", line 19, in encode
>
> return codecs.charmap_encode(input,self.errors,encoding_map)[0]
>
> UnicodeEncodeError: 'charmap' codec can't encode character '\u2119' in
>
> position
>
> 0: character maps to <undefined>
>
> >>>
>
>
>
> It seems that there is a difference between writing to stdout and writing to
>
> stderr. My questions are -
>
>
>
> 1. What is the difference?
>
>
>
> 2. Is there an easy way to get stdout to behave the same as stderr?
>
>
>
%%%%%%%%%%%
Again, from my "magic" interactive intepreter.
>>> x = 'a\u2119z'
>>> sys.stdout.encoding
'<unicode>'
>>> x
'aℙz'
>>> sys.stdout.encoding = 'cp437'
>>> print(x)
Traceback (most recent call last):
File "<eta last command>", line 1, in <module>
File "D:\jm\jmpy\eta\eta41beta1\etastdio.py", line 158, in write
s = s.encode(self.pencoding).decode('cp1252')
File "c:\python32\lib\encodings\cp437.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character '\u2119' in position 1:
character maps to <undefined>
>>> print(x.encode(sys.stdout.encoding, 'replace'))
'a?z'
>>> # voilà, no error
jmf
More information about the Python-list
mailing list