【问题标题】:Why can't I display a unicode character in the Python Interpreter on Mac OS X Terminal.app?为什么我不能在 Mac OS X Terminal.app 上的 Python 解释器中显示 unicode 字符?
【发布时间】:2011-02-12 16:38:32
【问题描述】:

如果我尝试粘贴 unicode 字符,例如中间点:

·

在我的 python 解释器中它什么也不做。我在 Mac OS X 上使用 Terminal.app,当我只是在 bash 中时,我没有问题:

:~$ ·

但在解释器中:

:~$ python
Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 

^^ 我什么也没得到,它只是忽略了我刚刚粘贴的字符。如果我使用中间点 '\xc2\xb7' 的转义 \xNN\xNN 表示,并尝试转换为 unicode,尝试显示点会导致解释器抛出错误:

>>> unicode('\xc2\xb7')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0: ordinal not in range(128)

我在 sitecustomize.py 中设置了 'utf-8' 作为我的默认编码:

>>> sys.getdefaultencoding()
'utf-8'

什么给了?这不是终端。不是 Python,我做错了什么?!

此问题与此question 无关,因为该个人能够将 unicode 粘贴到他的终端中。

【问题讨论】:

  • 我也有同样的问题,但是默认编码是ascii(不知道为什么):((

标签: python unicode macos terminal


【解决方案1】:

unicode('\xc2\xb7') 表示使用默认编解码器(即 ascii)解码有问题的字节字符串——当然这会失败(尝试设置不同的默认编码从未奏效,尤其不适用于“粘贴的文字”——无论如何都需要 不同的 设置)。您可以改用 u'\xc2\xb7',然后查看:

>>> print(u'\xc2\xb7')
·

因为它们当然是 两个 unicode 字符。而:

>>> print(u'\uc2b7')
슷

给你一个 unicode 字符(一些东方的说服力——对不起,我对这些东西一无所知)。顺便说一句,这些都不是您要寻找的“中间点”。也许你的意思是

>>> print('\xc2\xb7'.decode('utf8'))
·

which 中间的点。顺便说一句,对我来说(Mac Terminal.app 上来自 python.org 的 python 2.6.4):

>>> print('슷')
슷

哪一种让我吃惊(我预计会出错...!-)。

【讨论】:

  • 哇,如果有人想在我有 Python 的时候回答有关 Python 的问题,那就是 Alex Martelli!谢谢!我拥有你所有的 Python 书籍。
  • Hrm,所有这些都对我有用,并消除了我对 unicode 与 utf-8 的一些困惑,但我仍然无法在 Mac Terminal.app 上的 python 解释器中粘贴 unicode 字符.我的同事在使用默认的苹果 shell 时也不能,但他可以使用 python 的端口版本,我猜这是应用程序或剪贴板问题。
  • u'\xc2\xb7''\xc2\xb7'.decode('utf8')/unicode('\xc2\xb7','UTF-8') 不同。前者是两个代码点的 Unicode 字符串(U+00C2(带有 CIRCUMFLEX 的拉丁大写字母 A)和 U+00B7(中点)),后者计算为具有单个代码点的 Unicode 字符串(U+00B7(中点) ); 它的 UTF-8 编码需要两个字节)。 u'\uc2b7' 是(如图所示)完全不同的东西:U+C2B7(韩文音节 SEUS)。
  • 我认为这些是韩语字符(如果我错了,请纠正我)。它们听起来像“姐姐”。
猜你喜欢
  • 2010-10-21
  • 1970-01-01
  • 2015-03-07
  • 1970-01-01
  • 1970-01-01
  • 2015-09-19
  • 1970-01-01
  • 2017-05-17
相关资源
最近更新 更多