我从 Python 2.7 切换到 Python 3.6。
我有处理一些非英语内容的脚本。
我通常通过 Cron 和终端运行脚本。
我的 Python 2.7 脚本中有 UnicodeDecodeError,我通过这个解决了。
# encoding=utf8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
现在在 Python 3.6 中,它不起作用。我有类似 print("Here %s" % (myvar))
的打印语句,它会抛出错误。我可以通过将它替换为 myvar.encode("utf-8")
来解决这个问题,但我不想写每个打印语句。
我在我的终端做了 PYTHONIOENCODING=utf-8
,但我仍然有那个问题。
有没有更简洁的方法来解决 Python 3.6 中的 UnicodeDecodeError
问题?
有没有办法告诉 Python3 以 utf-8 打印所有内容?就像我在 Python2 中所做的那样?
原文由 Umair Ayub 发布,翻译遵循 CC BY-SA 4.0 许可协议
听起来您的语言环境已损坏 并且有另一个 bytes->Unicode 问题。您为 Python 2.7 所做的事情是一种仅掩盖了真正问题的 hack(您必须
reload sys
才能使其正常工作是有原因的)。要修复您的语言环境,请尝试从命令行键入
locale
。它应该看起来像:locale
取决于LANG
是否正确设置。 Python 有效地使用locale
来确定写入标准输出时使用的编码。如果无法解决,则默认为 ASCII。您应该首先尝试修复您的语言环境。如果
locale
错误,请确保您已安装适合您所在地区的正确语言包。如果一切都失败了,您始终可以通过设置
PYTHONIOENCODING=UTF-8
来修复 Python。这应该作为最后的手段使用,因为您将再次掩盖问题。如果 Python 在设置
PYTHONIOENCODING
后仍然抛出错误,那么请使用堆栈跟踪更新您的问题。您可能正在进行隐含的转换。