2024-05-26 20:47:44 发布
网友
当我从控制台运行应用程序时,Python有许多“无法编码”和“无法解码”的问题。但是在EclipsePyDevIDE中,默认字符编码设置为UTF-8,我很好。
我到处搜索设置默认编码,人们说Python在启动时删除sys.setdefaultencoding函数,我们不能使用它。
sys.setdefaultencoding
那么,最好的解决方案是什么?
下面是一个更简单的方法(hack),它返回从sys中删除的setdefaultencoding()函数:
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(此代码可以是第三方代码,这通常会使修复它变得不可能或危险)。
sys.setdefaultencoding()
A)控制sys.getdefaultencoding()输出:
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.encoding和stdout.encoding:
stdin.encoding
stdout.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
下面是一个更简单的方法(hack),它返回从
sys
中删除的setdefaultencoding()
函数:这不是一件安全的事情,不过:这显然是一种攻击,因为
sys.setdefaultencoding()
是在Python启动时故意从sys
中删除的。重新启用它并更改默认编码can break code that relies on ASCII being the default(此代码可以是第三方代码,这通常会使修复它变得不可能或危险)。A)控制
sys.getdefaultencoding()
输出:ascii
那么
以及
utf-16-be
你可以把你的网站customize.py放在更高的位置。
您还可以尝试通过@EOL ^{}
B)控制要设置的
stdin.encoding
和stdout.encoding
:ascii ascii
那么
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
相关问题 更多 >
编程相关推荐