python3检测文件的编码格式_判断文件编码方式

一、实验环境

1.Windows10x64

2.anaconda4.6.9 + python3.7.1(anaconda集成,不需单独安装)

二、任务需求

封装API,用于解析各式文件,获取需要的结果值。

三、问题描述

解析某个工具生成的Log,解析代码如下:

with open("BIT_log_191230_164145.log","r") as f:

f = f.readlines()

python脚本读取后全部是乱码;或者前半部分正常,后半部分程序报错。报错信息如下:

UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xff in position

四、解决方式

4.1 获取文件编码方式

右击文件,选择使用UltraEdit打开

793034-20191231180818631-390712678.png

单击选择 UltraEdit -> 编辑 -> 十六进制功能 -> 十六进制编辑 或者按Ctrl + H

793034-20191231181115235-763420462.png

根据文件头判断文件编码方式

793034-20191231181238624-1652064968.png

根据如下清单进行判断

EF BB BF    UTF-8

FE FF     UTF-16/UCS-2, little endian

FF FE     UTF-16/UCS-2, big endian

FF FE 00 00  UTF-32/UCS-4, little endian

00 00 FE FF  UTF-32/UCS-4, big-endian

该方式并非100%有效,因为文件头不是必须的,所以有些文件没有文件头

4.2 使用指定编码方式读取文件

with open("part2id.txt","r",encoding="gbk") as f:

f = f.readlines()

4.3 手动遍历常用编码方式

如果4.1方式无法获取文件编码方式,手动指定,一个个尝试,直到正确解析文件为止。

五、其他解决方式

5.1 读取文件忽略报错

with open("part2id.txt","r",encoding="gbk",errors="ignore") as f:

f = f.readlines()

5.2 使用二进制方式读取文件

with open("BIT_log_191230_164145.log",mode="rb") as f:

f = f.readlines()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值