Hel*_*123 2 python linux unicode python-2.7
UnicodeEncodeError: 'ascii' codec can't encode当我尝试在 Linux 上打印 Unicode 字符串时出现异常。在 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)
Run Code Online (Sandbox Code Playgroud)
在 Windows 上,我得到:
my_str = u'\u4ece\u5165\u5e93'
print "%r" % my_str #output: u'\u4ece\u5165\u5e93'
print "%s" % my_str #output: ???
Run Code Online (Sandbox Code Playgroud)
您locale和/或环境很可能已损坏、未安装、未设置或设置为C. Python 使用区域设置在标准输出上应用正确的编码器。这允许将 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=
$
Run Code Online (Sandbox Code Playgroud)
如果您看到错误消息或 LANG=C 或类似信息,Python 将使用 ASCII 编码器,它拒绝非 ASCII 字符。
要查找系统上安装的语言环境,请键入locale -a。选择适当的语言环境,最好是以“UTF-8”结尾的语言环境,并进行相应的设置LANG。例如
LANG=en_GB.UTF-8
Run Code Online (Sandbox Code Playgroud)
locale再次运行并检查错误。如果您仍然遇到错误,那么您将需要研究如何为您的发行版重建您的语言环境。
如果您在 IDE 中运行或无法修复,那么将以下环境变量添加到 shell 或 IDE 运行配置可能会成功:
export PYTHONIOENCODING=utf-8
Run Code Online (Sandbox Code Playgroud)
这告诉 Python 忽略语言环境并将 UTF-8 编码器应用于标准输出。
您可以通过使用localePython 中的模块来验证 Python 用于语言环境的内容。我的健康语言环境返回:
>>> import locale
>>> locale.getdefaultlocale()
('en_GB', 'UTF-8')
>>> locale.getpreferredencoding()
'UTF-8'
Run Code Online (Sandbox Code Playgroud)
不健康的语言环境将返回US-ASCII的locale.getpreferredencoding()
| 归档时间: |
|
| 查看次数: |
3253 次 |
| 最近记录: |