工作上需要分析一些客户发过来的文件,但是实际发现文件编码很混乱,怀疑是客户也是把几个来源的内容不做转码而拼凑的,file -I
识别不了:
$ file -I logs/mv1.txt
logs/mv1.txt: text/plain; charset=unknown-8bit
用 atom 打开文件,大致如下:
写了一个函数把乱码部分提取出来,想重新编码
if __name__ == "__main__":
cont = get_content("mv1.txt")
#print cont.decode('gbk')
print cont.decode('gb2312')
但是总是提示错误:
UnicodeDecodeError: 'gb2312' codec can't decode bytes in position 0-1: illegal multibyte sequence
客户比较强势,我这边推动不了客户修改 log 文件格式,不知道大伙有解决方案么?
1
binux 2017-05-24 16:20:11 +08:00
按行读,分别解码
|
3
fyooo OP 用 `chardet.detect` 得到的结果是:
``` {'confidence': 0.3888443803816883, 'language': 'Turkish', 'encoding': 'Windows-1254'} ``` 感觉没啥参考价值。 |
4
enenaaa 2017-05-24 16:37:14 +08:00
起码得让客户告诉你都有些什么编码
|
5
shalk 2017-05-24 16:40:39 +08:00
那到底是什么编码呢
|
8
murmur 2017-05-24 16:50:13 +08:00 1
这个看来按二进制切片解析然后分段 decode 了
|
9
fyooo OP 谢谢楼上几位,原来是 cont.decode('utf8').encode('gb18030'),诶!
|