代码之家  ›  专栏  ›  技术社区  ›  Bjorn

为什么我不能在mac os x terminal.app的python解释器中显示unicode字符?

  •  10
  • Bjorn  · 技术社区  · 16 年前

    如果我尝试粘贴一个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'的escape\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'
    

    给出了什么?不是终点站。不是巨蟒,我做错什么了?!

    这个问题与此无关 question 因为Indivdiual可以将Unicode粘贴到他的终端中。

    1 回复  |  直到 16 年前
        1
  •  6
  •   Alex Martelli    16 年前

    unicode('\xc2\xb7') 意思是用默认编解码器解码有问题的字节字符串,它是ASCII——当然失败了(尝试设置不同的默认编码从来没有成功过,特别是不适用于“粘贴的文本”——这需要 不同的 无论如何设置)。您可以使用u'\xc2\xb7'代替,并查看:

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

    既然是 当然是Unicode字符。而:

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

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

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

    哪一个 中间的圆点。顺便说一句,对于我来说(来自mac terminal.app上python.org的python 2.6.4):

    >>> print('슷')
    슷
    

    哪一种让我吃惊(我以为会出错…!-)