更改Python的默认编码?

2024-05-26 20:47:44 发布

您现在位置:Python中文网/ 问答频道 /正文

当我从控制台运行应用程序时,Python有许多“无法编码”和“无法解码”的问题。但是在EclipsePyDevIDE中,默认字符编码设置为UTF-8,我很好。

我到处搜索设置默认编码,人们说Python在启动时删除sys.setdefaultencoding函数,我们不能使用它。

那么,最好的解决方案是什么?


Tags: 函数应用程序编码sys解决方案解码字符utf
3条回答

下面是一个更简单的方法(hack),它返回从sys中删除的setdefaultencoding()函数:

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

这不是一件安全的事情,不过:这显然是一种攻击,因为sys.setdefaultencoding()是在Python启动时故意从sys中删除的。重新启用它并更改默认编码can break code that relies on ASCII being the default(此代码可以是第三方代码,这通常会使修复它变得不可能或危险)。

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

你可以把你的网站customize.py放在更高的位置。

您还可以尝试通过@EOL ^{}

B)控制要设置的stdin.encodingstdout.encoding

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)两者!

如果在尝试管道化/重定向脚本输出时遇到此错误

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)

只需在控制台中导出pythonionecoding,然后运行代码。

export PYTHONIOENCODING=utf8

相关问题 更多 >

    热门问题