我终于找到了一种方法。由于 IDLE 的源代码是发行版的一部分,因此您可以进行几个快速编辑以启用该功能。这些文件通常位于
C:\Python27\Lib\idlelib
。
第一步是防止 IDLE 尝试将所有这些漂亮的 Unicode 字符编码为无法处理它们的字符集。这由
IOBinding.py
控制。编辑该文件,找到
if sys.platform == 'win32':
后面的部分,并注释掉此行:
现在在它后面添加这行文字:
encoding = 'utf-8'
我希望有一种方法可以通过环境变量或其他方式来覆盖这个问题,但是
getdefaultlocale
直接调用一个Win32函数,该函数获取全局配置的Windows mbcs编码。
这只是解决了一半的问题,现在我们需要让命令行解释器识别输入字节是UTF-8编码的。似乎没有办法将编码传递到解释器中,所以我想出了一个最可行的方法。也许有人耐心一点可以想出更好的方法,但是现在这个方法可以使用。输入在
PyShell.py
中处理,在
runsource
函数中进行更改:
if isinstance(source, types.UnicodeType):
from idlelib import IOBinding
try:
source = source.encode(IOBinding.encoding)
except UnicodeError:
self.tkconsole.resetoutput()
self.write("Unsupported characters in input\n")
return
收件人:
from idlelib import IOBinding
if isinstance(source, types.UnicodeType):
try:
source = source.encode(IOBinding.encoding)
except UnicodeError:
self.tkconsole.resetoutput()
self.write("Unsupported characters in input\n")
return
source = "#coding=%s\n%s" % (IOBinding.encoding, source)
我们正在利用
PEP 263来为提供给解释器的每一行输入指定编码。
更新:在Python 2.7.10中,不再需要在PyShell.py中进行更改,如果将编码设置为utf-8,则已经可以正常工作。不幸的是,我还没有找到绕过IOBinding.py中更改的方法。