Ron Garret wrote:
> Is there a way to change the default string encoding used by the
> string.encode() method?
encode() or decode()? Encoding is best handled by the output stream, e. g.
passing codecs.open(...) instead of the builtin open(...).
> My default environment is utf-8 but I need it
> to be latin-1 to avoid errors like this:
>
>>>> 'Andr\xe9 Ramel'.decode()
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 4:
> ordinal not in range(128)
If your environment were latin-1, you'd get the same error because Python
assumes ascii by default.
> I can't change the code to pass an encoding argument to the decode
> method because it's someone else's code.
Does that code accept unicode strings? Try to pass u"Andre\xe9 Ramel"
instead of the byte string.
If all else fails there's
>>> sys.setdefaultencoding("latin1")
>>> "Andre\xe9 Ramel".decode()
u'Andre\xe9 Ramel'
but that's an evil hack, you should rather talk to the maintainer of the
offending code to update it to accept unicode.
Peter
--
http://mail.python.org/mailman/listinfo/python-list