当前位置: 首页 > 面试题库 >

Mac OS X终端机中的Python unicode

燕嘉熙
2023-03-14
问题内容

有人可以向我解释这个奇怪的事情:

在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,但是接收到的数据与此不匹配,因此您会遇到编码错误。

因此,在交互式会话中创建unicode字符串的直接方法是这样的:

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

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

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

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



 类似资料:
  • 问题内容: 是否存在任何标准的“自带电池”方法可以从Python脚本中清除终端屏幕,还是我必须诅咒(库,而不是文字)? 问题答案: 那么转义序列呢?

  • 我可以使用什么终端命令来终止MacOSX上的光标/鼠标进程? 我正在使用终端中的另一个命令更改鼠标的大小,现在我需要重新启动显示光标的过程。我已经搜索了几个小时来寻找一个类似的话题,但没有找到。 有人知道如何做到这一点吗?

  • 我在运行OS X Yosemite 10.10.3版本的MacBook Pro上,我在TextMate 2.0-beta.7.4版本中编写代码,所有的heroku和hubot都是最新版本。 在一堂课中,我们必须在计算机上安装Hubot,以便对终端中的代码进行本地测试。一旦代码是好的,然后我们把它推到Heroku并用另一个bot测试它。然后,如果这个bot很好,老师就推到git,我们就可以在slac

  • homebridge-macosx-info See changelog homebridge-macosx-info is homebridge plugin for Apple HomeKit, get and return somes systems informations from macOSX computer. Such as : updateTime Temperature (C°

  • 我通过自制软件在macOS 10.15中安装了Saxon。现在当我尝试 网旧金山。撒克逊人。使改变 我得到 zsh:找不到命令:net.sf.saxon.变换 我做错了什么? 谢谢,geb

  • 问题内容: 使用Octave,我能够在终端上绘制数组,例如,绘制带有函数值的数组将在我的终端上显示以下输出: 有什么方法可以在Python中完成类似的操作,特别是使用matplotlib吗?bashplotlib似乎提供了其中一些功能,但与Octave的产品相比似乎是非常基础的。 问题答案: 正如已经给出的几个答案所建议的那样,这是一个不错的选择。 但是,无需调用gnuplot子进程,使用pyth