[问题] 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