问题描述:python idle读取文件时显示乱码
操作系统:Windows 7 64位
语言:python2.7
Shell:IDLE
问题步骤:
python打开文件
>>> f=open('笔记.txt','rb')
>>> f.seek(50)
>>> print f.readline()
显示正常文字
>>> f.seek(-128,2)
>>> f.tell()
969L
>>> print f.read()
显示文件内容为乱码。。。
解决:
>>> import codecs
>>> print (f.read()).decode('gbk').encode('utf-8')
>>> print (f.read()).decode('utf-8').encode('gbk')
均不能解决
>>> import sys
>>> type=sys.getfilesystemencoding()
>>> print (f.read()).decode('utf-8').encode(type)
显示仍然为乱码
>>> print (f.read()).decode(type).encode('utf-8')
显示正确
输入type,显示mbcs
结论:
1.该系统windows下编码格式为mbcs格式;
2.>>> print (f.read()).decode(type).encode('utf-8')解释为py文件的输出为utf-8格式,系统的编码格式为type(mbcs)格式,使用该语句能正常在shell中显示中文文本。。。
遗留了一个问题:
为什么seek在末尾使用负数的位置描述的时候就会出现乱码情形呢?其余情况均不出现,是个问题,可能是python的一个bug。。。
print (f.read()).decode(type)
显示就可以。。只需要解码就可以。。print是可以直接打印的。。