【发布时间】:2021-05-14 22:43:03
【问题描述】:
我使用 Python 3.9.1 和 Linux (CentOS 7)。我想将 unicode 字符打印到控制台。我想用 UTF-8 做所有事情。如果我打开 python 交互式控制台并写:
print("├")
一切顺利,打印出来:
├
现在我将同一行 print("├") 放在一个文件中,然后使用 UTF-8 编码(Linux 上的默认值)保存文件。
然后我收到以下错误:
UnicodeEncodeError: 'latin-1' codec can't encode character '\u251c' in position 0: ordinal not in range(256)
“latin-1”从何而来?
我还在第一行强制使用 UTF-8(无论如何这应该是 Python3 中的默认值)
# coding: utf8
但它不会改变任何东西。
更多关于什么有效和什么无效的信息:
s = "├"
#print(s) # FAIL
s2 = s.encode('utf8')
print(s2) # prints b'\xe2\x94\x9c'
print(s2.decode('latin-1')) # prints the right thing
这里发生了什么?我可以在脚本中获得与交互式控制台中相同的行为吗?
【问题讨论】:
-
我假设您使用的是 Windows?
-
看起来,当您运行脚本时,它会打印到使用
latin-1编码的环境中? IE。运行脚本的控制台窗口未使用 UTF-8 编码? -
我不太明白,
print(s2.decode('latin-1'))不应该打印正确的东西,因为 s2 是 utf-8 编码的。 -
检查环境变量
PYTHONIOENCODING的值。 -
LANG环境变量设置为什么?
标签: python python-3.x utf-8