Re: [問題] utf-8的問題
※ 引述《alvin17 (alvin17)》之銘言:
: 測試結果報告大大
: 將site.py對應的code改成
: if 1:
: # Enable to support locale aware default string encodings.
: import locale
: loc = locale.getdefaultlocale()
: if loc[1]:
: encoding = loc[1]
: 到Eclipse + Pydev底下執行以下之code
: import sys
: print sys.stdout.encoding
: 結果為
: None
嗯嗯 ... 剛剛也用手邊的版本測了一下 (Eclipse 3.3.0 Pydev 1.3.10)
改過 site.py 讓預設 string encoding 跟著 locale 連動之後
在 Eclipse 裡面抓到的預設 string encoding 會是系統當時的 locale
(我用日文 WinXP, 所以是 cp932)
而 sys.stdout.encoding 的確也是 None
這時 print "中文測試" 會直接以「.py 檔用的 encoding 輸出, 不轉碼」
(因此,如果檔案用的是預設的 cp932 就可以正常顯示;如果存成 UTF-8 的話就不行)
而 print u"中文測試" 因為 sys.stdout.encoding == None
所以會採用系統預設 locale 轉換之後輸出
只要檔案有正確地指明編碼 (檔頭的 # coding: utf8 標記) 應該都可以輸出
不過可能會遇到 UnicodeEncodingError
我個人是習慣以 UTF-8 儲存 .py 檔,然後只使用 unicode string
不過這在 terminal 採用 cp932/cp950 的時候很容易遇到 UnicodeEncodingError
所以有時候可以暴力一點:
import codecs, locale, sys
sys.stdout = (codecs
.lookup(locale.getdefaultlocale()[1])
.streamwriter(sys.stdout, 'replace'))
... 不過這樣在 print 普通字串 (非 unicode 字串) 的時候卻會炸掉
也不算是完美解就是了
唉唉 ... 還是 Linux 下面的 utf-8 terminal 方便啊 .....
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.126.63.79
※ 編輯: Tiberius 來自: 59.126.63.79 (02/11 18:49)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 5 之 5 篇):
Python 近期熱門文章
PTT數位生活區 即時熱門文章