[python 3.6.7在控制台中打印Unicode字符时出现UnicodeEncodingError

问题描述 投票:0回答:1

进入问题之前,我想通知我看到很多关于此问题的StackOverflow问题和python bug,但我无法找到引起该问题的根本原因

我在centos计算机中收到UnicodeEncodingError。 Python不是内置在计算机中的,而是具有所需python版本(3.6.7)的虚拟环境已在其他位置构建并复制到此处。因此,在启动服务器时,我们将激活虚拟环境并启动服务器。

但是在控制台中记录或打印任何Unicode字符时,我遇到Unicode编码错误,类似这样

print("\u6211\u7684\u7535\u8111\u603b\u662f\u51fa\u73b0Windows\u9700\u8981\u6fc0\u6d3b")
UnicodeEncodeError: 'ascii' codec can't encode characters in position 56-63: ordinal not in range(128)

我通过python终端验证了以下内容

  • sys.getdefaultencoding()
  • sys.getfilesystemencoding()
  • sys.stdout.encoding
  • LANG设置为en.us-utf-8
  • 未设置LC_ALL

所有人都拥有utf-8

我经历了一些解决方案,要求修改LC_ALL或在环境变量中添加PYTHONIOENCODING,但由于环境是生产环境,因此我不确定在不知道副作用的情况下进行修改。

我想知道如何解决这个问题?

谢谢

python python-3.x linux centos7 python-unicode
1个回答
0
投票
大多数ascii终端无法渲染unicode字符(您可以尝试更改字体...可能会起作用)...

如果您在空闲状态下运行它,则可以... ...>

我会

强烈

建议只使用print(repr(string_that_might_have_unicode)),因为那样可以保证可打印的ASCII表示形式...而且没有比崩溃应用程序更糟糕的原因,因为您正尝试打印一些调试信息...您也可以尝试在打印前手动将其设置为encode

print(my_unicode_string.encode("utf8"))

那个

might

可以在某些终端上工作...但是实际上...只要打印repr,除非您向用户显示该代理(但是由于您谈论服务器,所以我认为这不是终端客户端应用程序,但是调试正在打印的信息(并重定向到日志文件?))
© www.soinside.com 2019 - 2024. All rights reserved.