Не могу ввести юникод в Python IDE (Mac OS X) - PullRequest
6 голосов
/ 15 июля 2011

Я пытаюсь собрать некоторый unicode raw_input в IDE Python по умолчанию, и, насколько я знаю, это должно быть так просто, как:

>>> c = raw_input()
日本語
>>> print c
日本語

Однако, когда я пытаюсь ввести символы Юникода, компьютер издает некоторые протесты, и я получаю пустую строку. (Для этого я нажимаю на переключатель IME рядом с временем и выбираю подходящий метод ввода [который в данном случае является японским вводом). Вне Python IDE ввод работает нормально, я могу вводить символы, и система распознает их как введенные. В IDE я наберу немного хираганы, и выпадающее окно выбора кандзи появляется как обычно, но когда я выбираю подходящее представление и нажимаю ввод, появляются эти гудки, и я ничего не получаю. Я полагаю, что где-то есть сеттинг, который я пропустил.

версии:

Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin

и

Python 2.5.4 (r254:67916, Jun 24 2010, 21:47:25) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin

ни одна из которых не работает. Там также это:

>>> import sys
>>> sys.getdefaultencoding()
'ascii'
>>> sys.stdin.encoding
'UTF-8'
>>> sys.stdout.encoding
'UTF-8'
>>> sys.getfilesystemencoding()
'utf-8'

но из того, что я прочитал, кодировка по умолчанию - загадочный зверь. Изменение его на самом деле ничего не исправит. То есть

>>> import sys
>>> sys.setdefaultencoding('utf-8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'setdefaultencoding'
>>> reload(sys)
<module 'sys' (built-in)>
>>> sys.setdefaultencoding('utf-8')
>>> # !!!
... c = raw_input()
no dice!

не работает. Просто больше звуков. Я также не могу вырезать и вставить японский текст из других приложений.

Ответы [ 4 ]

3 голосов
/ 06 апреля 2012

Код по умолчанию здесь не должен влиять.У меня была похожая проблема, и для меня было решение проверить параметр Escape не ASCII input в Terminal> Preferences> Settings> Advanced.Также убедитесь, что на той же странице настроек для параметра Кодировка символов установлено значение Юникод (UTF-8).

3 голосов
/ 03 декабря 2011

У меня была такая же проблема.В моем случае это оказалось проблемой libedit .Я исправил это, установив readline - что я должен был сделать из источника (отсюда: http://pypi.python.org/pypi/readline), так как с помощью pip или easy_install , по какой-то причине, не сделалфактически замените readline.

Если у вас установлен ipython , он сообщит вам при запуске, если вы используете libedit . И, если у вас такой же опыт, яВ этом случае вы увидите одинаковые проблемы как в интерпретаторе python в терминале, так и в ipython. Как только я установил readline, и ipython больше не сообщал мне, что он использует libedit, проблемы с вводом Unicode исчезли как в python, так и в ipython.

(Примечание: у меня также установлен bpython - и, поскольку он, кажется, не использует readline или libedit, а вместо этого имеет свои собственные процедуры редактирования строк, ввод Unicode в bpython всегда работал.)

0 голосов
/ 16 июля 2011

Попробуйте это:

import codecs, sys
sys.stdin = codecs.getreader('UTF-8')(sys.stdin)
sys.stdout = codecs.getwriter('UTF-8')(sys.stdout)
sys.stderr = codecs.getwriter('UTF-8')(sys.stderr)

print u'\u65e5\u672c\u8a9e'

Это работает для символов не ASCII при использовании Putty с кодировкой терминала, установленной в UTF-8. Я вижу ящики, потому что у меня не установлены шрифты для символов CJK, но я думаю, что это должно сделать это для вас.

Причина, по которой это работает, заключается в том, что по умолчанию интерпретатор Python использует кодек 'ascii' для stdin, stdout и stderr. А поскольку ASCII определяет только байтовые значения от 0 до 127, только те байтовые значения могут быть напечатаны.

0 голосов
/ 15 июля 2011

Edit: я пробовал Python из командной строки (Терминал), и он не работает , и я получаю звуковые сигналы, о которых вы говорите. Кажется, это не ограничение терминала, так как я могу вставить символы в приглашении $ в bash просто отлично. Это работает в режиме ожидания, как я покажу ниже.

Правка № 2: Интересно, что этот однострочный текст работает:

 $ python -c "exec(\"c=raw_input()\nprint c\")"
 日本語  <-- pasted
 日本語

Я бы добавил это в комментарий, но он не будет правильно отформатирован. Вывод из 2.6.5 на MacOSX:

Python 2.6.5 (r265:79359, Mar 24 2010, 01:32:55) 
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "copyright", "credits" or "license()" for more information.

    ****************************************************************
    Personal firewall software may warn about the connection IDLE
    makes to its subprocess using this computer's internal loopback
    interface.  This connection is not visible on any external
    interface and no data is sent to or received from the Internet.
    ****************************************************************

IDLE 2.6.5      
>>> c=raw_input()
日本語
>>> print c
日本語
>>> c
u'\u65e5\u672c\u8a9e'
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...