Re: [問題] 中文編碼的疑惑..

看板Python作者 (Victor)時間16年前 (2008/11/17 22:10), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/5 (看更多)
※ 引述《milua (milua)》之銘言: : 剛學習python : print 中文的問題一直困擾著我 : 但又解決不了 : 我的ide 是 eclispe + pydev : 我寫了一個test code為 : =========python code======= : #-*- coding: utf-8 -*- : print '科科' : =========================== : 存檔編碼,我是選utf8 : 用windows cmd 執行 出來的結果為 : 蝘? 因為在這裡你是用utf8去編python的檔案,'科科'被當做utf8編碼 #-*- coding: utf-8 -*- print '科科' print repr('科科') 蝘? '\xe7\xa7\x91\xe7\xa7\x91' 這麼看來就明白了,因為ascii的普通str,應該會被直接輸出 沒有經過編碼,所以就直接等於用ascii來輸出utf8的內容 會有亂碼是理所當然的 這就等於直接印出binary的那串資料而已 你的windows console不會認得utf8的編碼,它是用cp950的方式去解碼 用cp950去解utf8 結果就會是亂碼 '\xe7\xa7' 可能剛好被解碼成cp950的 蝘 所以才看得到 其它就是一團糟 : 如果換成 print u'科科' #-*- coding: utf-8 -*- print u'科科' print repr(u'科科') 如果是unicode的字串,就不一樣了,由於Python認得了它是unicode的字串 知道該用怎樣正確的方式把它解碼成unicode的字串 科科 u'\u79d1\u79d1' 並且,在print時,會依照sys.stdout.encoding去編碼字串 在你的環境,也就是cp950 u'\u79d1\u79d1' 就會被重編成 cp950編碼的 '科科' 這時候windows的console就認得了,因為它一直都是用cp950在解碼 cp950的碼c950來解 當然就沒問題 基本上Python都支援unicode了,就用unicode也就是u開頭的字串就好 如果非要讓非u開頭的字串也能正確印出來的話,那就將計就計 反正它被變成utf8,那就用utf8去解碼,轉成unicode 再印出來,像這樣 #-*- coding: utf-8 -*- print '科科'.decode('utf8') print repr('科科'.decode('utf8')) 可是這樣到頭來繞一圈都是一樣的,那何苦多繞一圈 就直接用unicode就可以了 -- 哇咧咧 創意投票系統 http://walele.com 易記學 程式設計教學 http://ez2learn.com/ 易記學 程式設計討論區 http://forum.ez2learn.com VICTOR's 個人Blog http://blog.ez2learn.com/ 財報分析王 http://victorlin.serveftp.org/stock/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.170.81.119
文章代碼(AID): #198NjAEK (Python)
討論串 (同標題文章)
文章代碼(AID): #198NjAEK (Python)