问题描述:
打开某CPP文件时,发现常用的GBK,UTF8都会报错
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbb in position 932: invalid start byte
UnicodeDecodeError: 'gbk' codec can't decode byte 0xbd in position 1277: illegal multibyte sequence
查阅后发现,编码数量:
GB 18030 > GBK > GB2312
UnicodeDecodeError: 'gb18030' codec can't decode byte 0xbd in position 1277: illegal multibyte sequence
依旧报错
解决过程:
遭到报错代码段:
if(pSdmcMsg == NULL)
{
return RL_FAILED;
}
并非中文,但是把这句话删除再重新输入,就不会报错。
尝试使用ASCII方法打开,惯例报错
UnicodeDecodeError: 'ascii' codec can't decode byte 0xbb in position 932: ordinal not in range(128)
通过open方式直接查看encoding的属性值:
发现encoding 为cp936,使用这个编码方式再打开:
UnicodeDecodeError: 'gbk' codec can't decode byte 0xbd in position 1277: illegal multibyte sequence
好嘛,又变成gbk报错了。
尝试使用python的包 chardet:
import chardet
f = open('tt.cpp','rb')
print(chardet.detect(f.readline()))
f.close()
{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
发现windows默认打开的方式是ascii,又转回去了。
最后找到常见的编码格式,抽奖尝试
with open('tt.cpp','r+',encoding='ISO-8859-1') as f:
for i in f.readlines():
print(i)
行了,不报错了。找到编码格式 ISO-8859-1
但是代码内的中文注释是乱码。
结果:
使用这个编码格式虽然还是会让中文注释是乱码,但是其他的部分都没问题,而且不会再报错。
逃避可耻,但有用。