unicode question...

Alex Martelli aleaxit at yahoo.com
Tue Nov 7 21:46:28 CET 2000


"Bjorn Pettersen" <bjorn at roguewave.com> wrote in message
news:mailman.973625063.1676.python-list at python.org...
> I'm on Win2k and would like to print a couple of unicode characters to a
> file so I can open them in another application to view them. My current
> attempts have not been successful...
    [snip]
> >>> s
> u'\u0141\u0142'
> >>> fp = open('foo.txt','w')
> >>> fp.write(s)
> Traceback (most recent call last):
>   File "<stdin>", line 1, in ?
> UnicodeError: ASCII encoding error: ordinal not in range(128)

The default encoding method is 'ascii'.  You probably want
to use 'utf-16'.  Therefore...:

>>> s=u'\u0141\u0142'

>>> s
u'\u0141\u0142'
>>> print s
Traceback (innermost last):
  File "<pyshell#2>", line 1, in ?
    print s
UnicodeError: ASCII encoding error: ordinal not in range(128)
>>> print s.encode('utf-16')
ÿþAB
>>> s.encode('utf-16')
'\377\376A\001B\001'
>>>

Note that the first 2 bytes in an utf-16 encoding are the
byte-order marks (little or big endian).  They only go
at the _start_ of a utf-16 encoded Unicode textfile, so
you may need to append a [2:] slicing (to all but the
first string being written) if you write several strings
to a file one after the other (there may be less-kludgy
ways, of course...).


Alex






More information about the Python-list mailing list