当我试图在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}$
很可能您的
locale
和/或环境已损坏,未安装,未设置或设置为C
。Python使用区域设置在stdout上应用正确的编码器。这允许将unicode编码为适当的编码。在如果从命令行运行Python,请确保您的语言环境是健康的。键入
locale
,您将看到如下内容:如果您看到错误消息或者LANG=C或类似的消息,Python将使用ASCII编码器,它拒绝非ASCII字符。在
要查找系统上安装的区域设置,请键入
^{pr2}$locale -a
。选择适当的语言环境,最好是以“UTF-8”结尾的语言环境,并相应地设置LANG
。E、 g再次运行
locale
,并检查错误。如果仍然出现错误,则需要研究如何为发行版重新构建区域设置。在如果在IDE中运行或无法修复,则可以成功地将以下环境变量添加到shell或IDE运行配置中:
这告诉Python忽略区域设置并对stdout应用UTF-8编码器。在
通过使用Python中的
locale
模块,可以验证Python正在为区域设置使用什么。我的健康区域设置返回:不正常的区域设置将为
locale.getpreferredencoding()
返回US-ASCII
你可以试试:
或者
^{pr2}$相关问题 更多 >
编程相关推荐