Почему я не могу отобразить символ Unicode в интерпретаторе Python в Mac OS X Terminal.app? - PullRequest
10 голосов
/ 27 апреля 2010

Если я пытаюсь вставить символ Unicode, например среднюю точку:

·

в моем интерпретаторе python ничего не происходит. Я использую Terminal.app в Mac OS X, и когда я просто в 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.
>>> 

^^ Я ничего не получаю, это просто игнорирует, что я просто вставил персонажа. Если я использую escape-представление \ xNN \ xNN средней точки '\ xc2 \ xb7' и пытаюсь конвертировать в юникод, попытка показать точку заставляет интерпретатора выдать ошибку:

>>> 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)

Я установил utf-8 в качестве кодировки по умолчанию в sitecustomize.py, так что:

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

Что дает? Это не Терминал. Это не Python, что я делаю не так?!

Этот вопрос не имеет отношения к этому вопросу , так как этот индивид может вставить юникод в свой терминал.

1 Ответ

6 голосов
/ 27 апреля 2010

unicode('\xc2\xb7') означает декодирование рассматриваемой строки байтов с помощью кодека по умолчанию, который является ascii - и это, конечно, не удается (попытка установить другую кодировку по умолчанию никогда не работала, и в частности не относится «вставленные литералы» - это все равно потребует установки другой ). Вы можете использовать вместо этого u '\ xc2 \ xb7' и увидеть:

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

так как это, конечно, два символа Юникода. В то время как:

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

дает вам один юникодный символ (некоторого восточного убеждения - извините, я ничего не знаю об этих вещах). Кстати, ни одна из них не является "средней точкой", которую вы искали. Может быть, вы имеете в виду

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

который является средней точкой. Кстати, для меня (python 2.6.4 с python.org на Mac Terminal.app):

>>> print('슷')
슷

что меня удивило (я ожидал ошибки ...! -).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...