Uma*_*air 4 python unicode python-3.x
我从Python 2.7切换到Python 3.6。
我有处理某些非英语内容的脚本。
我通常通过Cron和Terminal运行脚本。
我的python 2.7脚本中出现了UnicodeDecodeError,我解决了这个问题。
# encoding=utf8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
Run Code Online (Sandbox Code Playgroud)
现在在Python 3.6中,它不起作用。我有类似的打印语句print("Here %s" % (myvar))
,它会引发错误。我可以通过将其替换为来解决此问题,myvar.encode("utf-8")
但我不想用每个print语句编写。
我PYTHONIOENCODING=utf-8
在终端机上做了,但仍然有这个问题。
有没有更清洁的方法来解决UnicodeDecodeError
Python 3.6中的问题?
有没有办法告诉Python3在utf-8中打印所有内容?就像我在Python2中所做的一样?
Ala*_*ack 10
听起来您的语言环境已损坏,并且还有另一个bytes-> Unicode问题。您为Python 2.7做的事情是只掩盖了真正的问题的hack(这是您必须reload sys
使其工作的原因)。
要修复您的语言环境,请尝试locale
从命令行键入内容。它看起来应该像这样:
LANG=en_GB.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_ALL=
Run Code Online (Sandbox Code Playgroud)
locale
取决于LANG
正确设置。Python有效地用于计算locale
出向stdout写入时使用的编码。如果无法解决,则默认为ASCII。
您应该首先尝试修复您的语言环境。如果locale
出现错误,请确保已为您所在的地区安装了正确的语言包。
如果所有其他方法均失败,则可以随时通过设置来修复Python PYTHONIOENCODING=UTF-8
。这将被用作最后的手段,因为您将再次掩盖问题。
如果设置后Python仍然抛出错误,PYTHONIOENCODING
请使用stacktrace更新您的问题。您可能正在进行隐式转换。
小智 6
我在基于 Ubuntu 18.04 的 Docker 容器中使用 Python 时遇到了这个问题。这似乎是一个区域设置问题,通过在 Dockerfile 中添加以下内容解决了这个问题:
ENV LANG C.UTF-8
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9315 次 |
最近记录: |