通常,当我在IDLE中交互式工作时,我想将一个Unicodestring粘贴到IDLE窗口中。 它似乎正确粘贴,但立即产生一个错误。 在输出上显示相同的字符没有问题。
>>> c = u'ĉ' Unsupported characters in input >>> print u'u0109' ĉ
我怀疑,像大多数Windows程序一样,input窗口在内部使用UTF-16,并且在处理完整的Unicode集合时没有问题; 问题是IDLE坚持强制所有input到默认的mbcs代码页面,而不在该页面的任何东西都被拒绝。
有什么办法来configuration或哄骗IDLE接受完整的Unicode字符集作为input?
Python 3.2处理这个更好,并没有任何问题,我扔在它。
HTTP状态:在.net浏览器控件中的12002
如何在不占用焦点的屏幕上绘制通知(Windows)
DCOM CoCreateInstanceEx E_ACCESSDENIED
我知道我可以简单地将代码保存到UTF-8文件并导入,但我希望能够在交互式窗口中使用Unicode字符。
在Windows 7上安装ImageMagick和rmagick
基于CDialog的MFC应用程序只能在主监视器中启动
如何find跳转列表窗口?
在Windows上安装Redmine时发生RMagick错误
在IIS 7.5 / Windows 7家庭高级版RavendB错误
我终于想出了一个办法。 由于IDLE的源代码是发行版的一部分,因此可以进行一些快速编辑来启用该功能。 这些文件通常位于C:Python27Libidlelib 。
第一步是防止IDLE尝试将所有这些不错的Unicode字符编码到无法处理它们的字符集中。 这由IOBinding.py控制。 编辑这个文件,找到if sys.platform == 'win32':之后的部分if sys.platform == 'win32':注释掉这一行:
#encoding = locale.getdefaultlocale()[1]
现在在它后面添加这一行:
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 inputn") return
至:
from idlelib import IOBinding # line moved if isinstance(source,types.UnicodeType): try: source = source.encode(IOBinding.encoding) except UnicodeError: self.tkconsole.resetoutput() self.write("Unsupported characters in inputn") return source = "#coding=%sn%s" % (IOBinding.encoding,source) # line added
我们利用PEP 263来指定提供给解释器的每一行输入的编码。
更新 :在Python 2.7.10中 ,不再需要在PyShell.py进行更改,如果编码设置为utf-8 ,它已经可以正常工作。 不幸的是我还没有找到绕过IOBinding.py的变化的IOBinding.py 。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。