[問題] python讀檔時不認得中文字?

作者: wohtp (會喵喵叫的大叔)   2014-10-08 16:24:59
第一次來這裡問問題,請各位板友指教!
其實我猜這大概不是python本身的問題...
環境:Windows 8.1 64-bit,非unicode編碼是繁中
Python 3.4.1 (Anaconda 2.1.0 64-bit)
文字檔編輯器試過notepad和notepad++,都有記得指定utf-8編碼
如果我在interpreter下面直接打
s = '中文測試'
這樣一切都很好,python 3直接認得unicode,我要 s[0] 它就給我 '中',等等。
但是如果我另外存一個 test.txt,內容一樣只有 中文測試 四個字,然後做
f = open('test.txt')
s = f.read()
只會吃到這個exception:
UnicodeDecodeError: 'cp950' codec can't decode byte 0xe6 in position 6:
illegal multibyte sequence
請大家開始隔空抓藥,謝謝!
作者: uranusjr (←這人是超級笨蛋)   2014-10-08 16:32:00
不是 Python 認不得, 是 command prompt 認不得
作者: elleryq   2014-10-08 16:33:00
你需要codecs模組,請閱讀http://tinyurl.com/lsxfad3
作者: os653   2014-10-08 16:43:00
要指定open的參數encoding呀...
作者: alibuda174 (阿哩不達)   2014-10-08 17:00:00
open的encoding會因平台不同而不同
作者: os653   2014-10-08 17:11:00
別打print(s),打s看結果,還有notepad存的是utf-8-sig
作者: alibuda174 (阿哩不達)   2014-10-08 17:37:00
print會輸出到sys.stdout 而它的encoding可能是cp950可以把sys.stdout的encoding換掉或是把讀進來的字串 轉換它的encoding或是一開始就把檔案儲存成cp950的encoding
作者: os653   2014-10-08 17:56:00
那個\ufeff就是叫你用utf-8-sig,還有這跟Windows沒啥關係那個...我意思是用encoding='utf-8-sig',你應該就能print如果不用其他國家的語言(或混用coding),理論上都能print
作者: alibuda174 (阿哩不達)   2014-10-08 22:39:00
推os653,thanks.
作者: ccwang002 (亮)   2014-10-08 23:54:00
補充一下,如果是英文系統應該是無法正確顯示字但它印出的 □ 在其他程式貼上能顯示 (powershell)
作者: zerof (貓橘毛發呆雕像)   2014-10-09 17:28:00
windows command 預設是 950

Links booklink

Contact Us: admin [ a t ] ucptt.com