无法在Python IDE中输入Unicode(Mac OS X)
我正在尝试在默认的Python IDE中输入一些Unicode字符,按照我的理解,这应该很简单:
>>> c = raw_input()
日本語
>>> print c
日本語
但是,当我尝试输入这些Unicode字符时,电脑发出了一些抗议的哔声,最后我得到的却是一个空字符串。(为了做到这一点,我点击了时间旁边的输入法切换器,选择了合适的输入法【在这个例子中是日语输入】。在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 个回答
编辑:我在命令行(终端)中尝试了Python,但它不好使,我听到你说的那种哔声。看起来这不是终端的问题,因为我可以在bash
的$
提示符下正常粘贴字符。在Idle中是可以正常工作的,下面我会展示。
编辑 #2:有趣的是,这个单行代码是可以工作的:
$ python -c "exec(\"c=raw_input()\nprint c\")"
日本語 <-- pasted
日本語
我本想把这个放在评论里,但格式不对。以下是MacOSX上2.6.5版本的输出:
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'
>>>
默认编码在这里应该没什么影响。我之前也遇到过类似的问题,对我来说,解决办法是去检查一下终端的设置。具体路径是:终端 > 偏好设置 > 设置 > 高级,找到转义非ASCII输入这个选项并勾上。同时,确保在同一设置页面中,字符编码设置为Unicode(UTF-8)。
我之前也遇到过同样的问题。对我来说,问题出在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,而是用自己的行编辑程序,所以在bpython中输入Unicode总是能正常工作。)