代码如下:
file_in="C:\\Users\\Administrator\\Desktop\\parking datum.txt"
data=''
fbegin=0
fend=0
d=''
with open(file_in,"r") as file:
for i in file.readlines():
for e in i:
if e=='"':
continue;
if e=='}':
fbegin=0
data=(data+d)
d=''
if fbegin==1:``
d=d+e;
if e=='{':
fbegin=1
print('----------------')
print(data)
上述代码是为了把一个文件读入为字符串并在读的过程中进行了一定的处理,但是python3.6显示:
UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x82 in position 66: illegal multibyte sequence
经过上网查询,发现txt文本分为4中编码方式:ANSI、Unicode、Unicode big endian和UTF-8。打开txt点击文件-另存为会显示当前txt的编码方式(会将当前的编码方式当成另存为的默认格式)。而该报错是指gbk编码译码器(codec)无法解码(decode)当前文件。
解决方式:with open(file_in,“r”) as file:改为with open(file_in,“r”,encoding=‘UTF-8’) as file:即可
python磨人的编码形式是Unicode,常见的编码形式除了Unicode还有UTF-8、gbk, gb2312等。不同的编码形式之间并不兼容,需要转换。而encoding指的是当前文件的编码形式,对于我要读取的txt编码形式是UTF-8,所以设置encodeing='UTF-8’即可。
另外我还尝试了读取采用Unicode编码的txt文件,但需要设置encodeing='UTF-16LE’才可以。从网上了解到我们说的unicode, 其实就是utf-16, 但最通用的却是utf-8,因为适合存储和流通。再回到这个问题来,python提示gkb编码解码器无法解码这个unicode编码的txt,那我们就换一个解码器,通过设置encoding='UTF-16’或encoding='UTF-16LE’即可完成解码。