Mac下 IDLE 不能输入中文有两种情况:
第一种情况是在 IDLE 下中文输入法失效。这是因为 IDLE 界面使用的 Tkinter 需要依赖 Tcl/Tk,而系统自带的 Tcl/Tk 版本太低,造成了不兼容的问题。(IDLE and tkinter with Tcl/Tk on Mac OS X)
解决方法是下载安装新版本的 Tcl/Tk,下载地址:ActiveTcl Downloads。而如果有使用 Homebrew 的话,可以用 brew install tcl-tk 安装(如果是用 Homebrew 安装的 Python,已经包含了新版本的 tcl-tk,那么应该不会有这个问题)。
第二种情况是在 IDLE 的交互模式里输入中文,会提示 "Unsupported characters in input"。根据 Typing UTF-8 characters in IDLE 所说,这是因为在交互模式下的 IDLE 里输入非 ascii 字符时,IDLE 会根据电脑上的语言环境设置来判断编码,然后用这个编码对输入的非 ascii 字符进行转换后才能运行。测试后发现,不管我把 Mac 系统的语言设置成中文还是英文,在直接运行 IDLE 的时候,这个编码一直是 'us-ascii',并不支持对非 ascii 的中文进行转换,于是就报错了。需要将其更改为 'utf-8' 编码才能支持输入中文。
之前我在 StackOverflow 上找到了一个解决方法(python - UnicodeEncodeError with csvwriter),其通过在 IDLE 的源码中插入一行代码来使得 IDLE 在交互模式下使用的编码强制更改为 'utf-8' 。
但我后来发现更为简单的一个方法是,设置 IDLE 的环境变量 "LANG" 为 "en_US.UTF-8",就能使 IDLE 在交互模式下使用的编码更改为 'utf-8'。
更改 IDLE 的环境变量有多个办法,而我采用的方法如下:
1. 对 IDLE.app 程序文件右键打开包内内容,打开编辑其中的 IDLE.app/Contents/MacOS/IDLE 文件。
2. 在大概第24行的 os.environ["PYTHONEXECUTABLE"] = executable 代码上方加入一行代码:
3. 保存文件,重新打开 IDLE 就可以输入中文了。
我原来采用的更改 IDLE 源码的旧方法的步骤如下:
1. 首先要找到你电脑上 IDLE 运行的 Python 的自带库的位置,可以通过以下命令获得 os.pyc 的路径,其所在文件夹就是 Python 自带库的位置。
2. 在此路径下找到 idlelib 文件夹,打开其中的 IOBinding.py 文件。在大概第68行的 encoding = encoding.lower() 代码下方加入一行代码:

3. 保存文件,重新打开 IDLE 就可以输入中文了。
第一种情况是在 IDLE 下中文输入法失效。这是因为 IDLE 界面使用的 Tkinter 需要依赖 Tcl/Tk,而系统自带的 Tcl/Tk 版本太低,造成了不兼容的问题。(IDLE and tkinter with Tcl/Tk on Mac OS X)
解决方法是下载安装新版本的 Tcl/Tk,下载地址:ActiveTcl Downloads。而如果有使用 Homebrew 的话,可以用 brew install tcl-tk 安装(如果是用 Homebrew 安装的 Python,已经包含了新版本的 tcl-tk,那么应该不会有这个问题)。
第二种情况是在 IDLE 的交互模式里输入中文,会提示 "Unsupported characters in input"。根据 Typing UTF-8 characters in IDLE 所说,这是因为在交互模式下的 IDLE 里输入非 ascii 字符时,IDLE 会根据电脑上的语言环境设置来判断编码,然后用这个编码对输入的非 ascii 字符进行转换后才能运行。测试后发现,不管我把 Mac 系统的语言设置成中文还是英文,在直接运行 IDLE 的时候,这个编码一直是 'us-ascii',并不支持对非 ascii 的中文进行转换,于是就报错了。需要将其更改为 'utf-8' 编码才能支持输入中文。
之前我在 StackOverflow 上找到了一个解决方法(python - UnicodeEncodeError with csvwriter),其通过在 IDLE 的源码中插入一行代码来使得 IDLE 在交互模式下使用的编码强制更改为 'utf-8' 。
但我后来发现更为简单的一个方法是,设置 IDLE 的环境变量 "LANG" 为 "en_US.UTF-8",就能使 IDLE 在交互模式下使用的编码更改为 'utf-8'。
更改 IDLE 的环境变量有多个办法,而我采用的方法如下:
1. 对 IDLE.app 程序文件右键打开包内内容,打开编辑其中的 IDLE.app/Contents/MacOS/IDLE 文件。
2. 在大概第24行的 os.environ["PYTHONEXECUTABLE"] = executable 代码上方加入一行代码:
os.environ["PYTHONIOENCODING"] = "utf-8"
我原来采用的更改 IDLE 源码的旧方法的步骤如下:
1. 首先要找到你电脑上 IDLE 运行的 Python 的自带库的位置,可以通过以下命令获得 os.pyc 的路径,其所在文件夹就是 Python 自带库的位置。
import os
print os.__file__
encoding = "utf-8"

3. 保存文件,重新打开 IDLE 就可以输入中文了。