Unicode blues in Python3

nn pruebauno at latinmail.com
Tue Mar 23 13:33:33 EDT 2010


I know that unicode is the way to go in Python 3.1, but it is getting
in my way right now in my Unix scripts. How do I write a chr(253) to a
file?

#nntst2.py
import sys,codecs
mychar=chr(253)
print(sys.stdout.encoding)
print(mychar)

 > ./nntst2.py
ISO8859-1
ý

 > ./nntst2.py >nnout2
Traceback (most recent call last):
  File "./nntst2.py", line 5, in <module>
    print(mychar)
UnicodeEncodeError: 'ascii' codec can't encode character '\xfd' in
position 0: ordinal not in range(128)

> cat nnout2
ascii

..Oh great!

ok lets try this:
#nntst3.py
import sys,codecs
mychar=chr(253)
print(sys.stdout.encoding)
print(mychar.encode('latin1'))

> ./nntst3.py
ISO8859-1
b'\xfd'

> ./nntst3.py >nnout3

> cat nnout3
ascii
b'\xfd'

..Eh... not what I want really.

#nntst4.py
import sys,codecs
mychar=chr(253)
print(sys.stdout.encoding)
sys.stdout=codecs.getwriter("latin1")(sys.stdout)
print(mychar)

 > ./nntst4.py
ISO8859-1
Traceback (most recent call last):
  File "./nntst4.py", line 6, in <module>
    print(mychar)
  File "Python-3.1.2/Lib/codecs.py", line 356, in write
    self.stream.write(data)
TypeError: must be str, not bytes

..OK, this is not working either.

Is there any way to write a value 253 to standard output?



More information about the Python-list mailing list