Re: [问题] IDLE无法正确处理unicode

楼主: os653   2014-09-18 05:41:34
年代久远,记忆模糊,有错请指正
简单来说,IDLE 是个非常鸟的东西
没事别乱用,有事也不建议用 XD
当初也被这问题搞得很痛苦,后来发现根本不是我的错
以下为推测
你的问题出自于 IDLE 的架构
IDLE 的架构估计是这样的
程式一负责输入和输出,程式二负责计算,两者间用 socket 连接
这样做有个好处,就是能够处理 KeyboardInterrupt
你可以在 IDLE 试试看
while True:
pass
然后狂按 Ctrl-C,应该可以正常跳出,胡乱按 Enter 键也能换行
如果是在 PythonWin,程式就当在那里(实际上在执行无限循环),不管你按啥都没反应
这就是有没有把程式分成两部分的差别
除此之外因为使用 socket 通讯,速度奇慢
但你的问题也就因此产生
输入 u'中文',正常 python 会看到 u'\u4e2d\u6587'
但在 IDLE 会看到 u'\xa4\xa4\xa4\xe5'
这大概是因为,在 IDLE 里面是这样搞的
程式一收到 "u'中文'",把这字串丢给程式二执行
程式二执行 eval("u'中文'"),结果就是 u'\xa4\xa4\xa4\xe5'
把这结果丢回程式一,输出自然还是 u'\xa4\xa4\xa4\xe5'
如果坚持要用 IDLE 的话,记得输入永远不能使用 unicode
错误输入如下
>>> s = u'中文'
>>> s
u'\xa4\xa4\xa4\xe5'
>>> print(s)
¤¤¤å
正确(?)输入如下(跟 console encoding 有关)
>>> s = '中文'.decode('big5')
>>> s
u'\u4e2d\u6587'
>>> print(s)
中文
理论上,这问题只会出现在使用者输入上
像是读档之类的,应该也许大概可能不会出问题
但是要不小心搞出问题也不是不可能
BeautifulSoup 我不熟,不清楚是你程式写错了还是这问题真的发生了
总而言之,珍惜生命,远离 IDLE
或是你要装 Python 3 也可以啦,Python 3 的 IDLE 应该不会有这问题了
作者: uranusjr (←這人是超級笨蛋)   2014-09-18 11:14:00
珍惜生命,远离 IDLE
作者: ghmsxtwo (YI)   2014-09-18 15:07:00
我用IDLE会不定时蓝屏…
作者: timTan (用口头禅区分年记)   2014-09-18 19:45:00
1是要接力idle 传说吗
作者: sarsman (DeNT15T♠)   2014-09-19 20:14:00
作者: zazion (Zec)   2014-09-21 14:09:00
谢谢解答!这就是我碰到的问题XD原来IDLE有传说XDD 大感谢!话说我用PythonWin就正常了 有点想听听idle传说XD
作者: ptero (ptero)   2014-09-24 13:07:00
话说python 3应该没这问题吧?
作者: zazion (Zec)   2014-10-08 19:48:00
对 python3没有这问题

Links booklink

Contact Us: admin [ a t ] ucptt.com