Changing default encoding of Python?

console, encoding, python, utf-8

Solution

Here is a simpler method (hack) that gives you back the `setdefaultencoding()` function that was deleted from `sys`:

import sys
# sys.setdefaultencoding() does not exist, here!
reload(sys)  # Reload does the trick!
sys.setdefaultencoding('UTF8')

(Note for Python 3.4+: `reload()` is in the `importlib` library.)

This is not a safe thing to do, though: this is obviously a hack, since `sys.setdefaultencoding()` is purposely removed from `sys` when Python starts. Reenabling it and changing the default encoding can break code that relies on ASCII being the default (this code can be third-party, which would generally make fixing it impossible or dangerous).

PS: This hack doesn't seem to work with Python 3.9 anymore.

Problem

I have many "can't encode" and "can't decode" problems with Python when I run my applications from the console. But in the Eclipse PyDev IDE, the default character encoding is set to UTF-8, and I'm fine. I searched around for setting the default encoding, and people say that Python deletes the `sys.setdefaultencoding` function on startup, and we can not use it. So what's the best solution for it?

Original source

Related problems