Mac OS X 终端中的 Python unicode

标签 python macos unicode terminal

谁能给我解释一下这个奇怪的事情:

在 python shell 中输入以下西里尔字符串:

>>> print 'абвгд'
абвгд

但是当我输入时:

>>> print u'абвгд'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-9: ordinal not in range(128)

由于第一个字符串正确出现,我认为我的 OS X 终端可以表示 unicode,但事实证明在第二个情况下它不能。为什么?

最佳答案

>>> print 'абвгд'
абвгд

当您输入一些字符时,您的终端将决定这些字符如何呈现给应用程序。您的终端可能会将字符提供给编码为 utf-8、ISO-8859-5 或什至只有您的终端可以理解的编码的应用程序。 Python 将这些字符作为一些字节序列获取。然后 python 按原样打印出这些字节,您的终端以某种方式解释它们以显示字符。由于您的终端通常解释字节的方式与之前对其进行编码的方式相同,因此所有内容都会像您输入的那样显示。

>>> u'абвгд'

在这里您输入一些字符,这些字符作为字节序列到达 python 解释器,可能由终端以某种方式编码。使用 u 前缀,python 尝试将此数据转换为 unicode。要正确地做到这一点,python 必须知道您的终端使用什么编码。在您的情况下,Python 似乎猜测您的终端编码将是 ASCII,但接收到的数据与该编码不匹配,因此您会收到编码错误。

因此,在交互式 session 中创建 unicode 字符串的直接方法如下所示:

>>> us = 'абвгд'.decode('my-terminal-encoding')

在文件中,您还可以使用特殊模式行指定文件的编码:

# -*- encoding: ISO-8859-5 -*-
us = u'абвгд'

有关设置默认输入编码的其他方法,您可以查看 sys.setdefaultencoding(...)sys.stdin.encoding

关于Mac OS X 终端中的 Python unicode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/918294/

相关文章:

python - Tox:flake8 和 pylint 等工具的每个平台配置

python - 将 unicode 字符串写入 Excel 2007

Python CSV 文件 UTF-16 到 UTF-8 打印错误

python - 如何在机器人框架中将列表作为命令行参数传递。?

python - 当任一侧大于 1280 时使用 Python 调整图像大小

从第二个 "\n"和其余部分中删除字符串中的行返回(不要删除第一个)

python - 段错误: 11 when I run Pygame

string - python : Printing unicode characters beyond FFFF

python - Azure Databricks : This cluster's runtime version is out of support

xcode - Nib 的 IBOutlet 未连接(nil)