Linux上的UnicodeEncodeError,但Windows上没有

2024-09-29 21:38:45 发布

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

当我试图在Linux上打印Unicode字符串时,我遇到了一个UnicodeEncodeError: 'ascii' codec can't encode异常。在Windows上我没有得到错误。在

Linux上执行的代码:

    my_str = u'\u4ece\u5165\u5e93'
    print "%r"  % my_str #output: u'\u4ece\u5165\u5e93' 
    print "%s" % my_str #output: UnicodeEncodeError: 'ascii' codec can't encode character u'\u4ece' in position 0: ordinal not in range(128)

在Windows上我得到:

^{pr2}$

Tags: inoutputmylinuxwindowsasciicancodec
2条回答

很可能您的locale和/或环境已损坏,未安装,未设置或设置为C。Python使用区域设置在stdout上应用正确的编码器。这允许将unicode编码为适当的编码。在

如果从命令行运行Python,请确保您的语言环境是健康的。键入locale,您将看到如下内容:

 $ locale
LANG=en_GB.UTF-8
LANGUAGE=
LC_CTYPE="en_GB.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_PAPER="en_GB.UTF-8"
LC_NAME="en_GB.UTF-8"
LC_ADDRESS="en_GB.UTF-8"
LC_TELEPHONE="en_GB.UTF-8"
LC_MEASUREMENT="en_GB.UTF-8"
LC_IDENTIFICATION="en_GB.UTF-8"
LC_ALL=
 $

如果您看到错误消息或者LANG=C或类似的消息,Python将使用ASCII编码器,它拒绝非ASCII字符。在

要查找系统上安装的区域设置,请键入locale -a。选择适当的语言环境,最好是以“UTF-8”结尾的语言环境,并相应地设置LANG。E、 g

^{pr2}$

再次运行locale,并检查错误。如果仍然出现错误,则需要研究如何为发行版重新构建区域设置。在

如果在IDE中运行或无法修复,则可以成功地将以下环境变量添加到shell或IDE运行配置中:

export PYTHONIOENCODING=utf-8

这告诉Python忽略区域设置并对stdout应用UTF-8编码器。在

通过使用Python中的locale模块,可以验证Python正在为区域设置使用什么。我的健康区域设置返回:

>>> import locale
>>> locale.getdefaultlocale()
('en_GB', 'UTF-8')
>>> locale.getpreferredencoding()
'UTF-8'

不正常的区域设置将为locale.getpreferredencoding()返回US-ASCII

你可以试试:

print u"{0}".format(str)

或者

^{pr2}$

相关问题 更多 >

    热门问题