Re: [問題] IDLE無法正確處理unicode

看板Python作者 (allstar)時間11年前 (2014/09/18 05:41), 編輯推噓6(603)
留言9則, 6人參與, 最新討論串2/2 (看更多)
年代久遠,記憶模糊,有錯請指正 簡單來說,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 應該不會有這問題了 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.46.138.195 ※ 文章網址: http://www.ptt.cc/bbs/Python/M.1410990096.A.222.html

09/18 11:14, , 1F
珍惜生命,遠離 IDLE
09/18 11:14, 1F

09/18 15:07, , 2F
我用IDLE會不定時藍屏…
09/18 15:07, 2F

09/18 19:45, , 3F
1是要接力idle 傳說嗎
09/18 19:45, 3F

09/19 20:14, , 4F
09/19 20:14, 4F

09/21 14:09, , 5F
謝謝解答!這就是我碰到的問題XD原來IDLE有傳說XDD 大感
09/21 14:09, 5F

09/21 14:09, , 6F
謝!
09/21 14:09, 6F

09/21 14:10, , 7F
話說我用PythonWin就正常了 有點想聽聽idle傳說XD
09/21 14:10, 7F

09/24 13:07, , 8F
話說python 3應該沒這問題吧?
09/24 13:07, 8F

10/08 19:48, , 9F
對 python3沒有這問題
10/08 19:48, 9F
文章代碼(AID): #1K6W0G8Y (Python)
文章代碼(AID): #1K6W0G8Y (Python)