如何更改Python的默认编码?
14 个回答
53
A) 控制 sys.getdefaultencoding()
输出的方法:
python -c 'import sys; print(sys.getdefaultencoding())'
ascii
然后
echo "import sys; sys.setdefaultencoding('utf-16-be')" > sitecustomize.py
和
PYTHONPATH=".:$PYTHONPATH" python -c 'import sys; print(sys.getdefaultencoding())'
utf-16-be
你可以把你的 sitecustomize.py 文件放在 PYTHONPATH
的更高位置。
另外,你也可以试试 reload(sys).setdefaultencoding
这个方法,作者是 @EOL。
B) 控制 stdin.encoding
和 stdout.encoding
的方法是设置 PYTHONIOENCODING
:
python -c 'import sys; print(sys.stdin.encoding, sys.stdout.encoding)'
ascii ascii
然后
PYTHONIOENCODING="utf-16-be" python -c 'import sys;
print(sys.stdin.encoding, sys.stdout.encoding)'
utf-16-be utf-16-be
最后:你可以选择使用 A) 或 B),或者两者都用!
99
如果你在尝试将你的脚本输出重定向或管道时遇到这个错误:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)
只需要在控制台中设置一下 PYTHONIOENCODING
,然后再运行你的代码就可以了。
export PYTHONIOENCODING=utf8
176
这里有一个更简单的方法(小技巧),可以让你重新获得被从 sys
中删除的 setdefaultencoding()
函数:
import sys
# sys.setdefaultencoding() does not exist, here!
reload(sys) # Reload does the trick!
sys.setdefaultencoding('UTF8')
(注意:对于 Python 3.4 及以上版本,reload()
在 importlib
库中。)
不过,这样做并不安全,因为这显然是个小技巧,sys.setdefaultencoding()
是在 Python 启动时故意从 sys
中移除的。重新启用它并改变默认编码 可能会导致依赖 ASCII 作为默认编码的代码出现问题(这些代码可能是第三方的,通常修复起来既困难又危险)。
附注:这个小技巧在 Python 3.9 中似乎不再有效。