zoukankan      html  css  js  c++  java
  • 判断文件编码方式

    一、实验环境

    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打开

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

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

    • 根据如下清单进行判断
    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()
    

      

    参考文档1:http://www.niumou.com.cn/211

    参考文档2:https://blog.csdn.net/liyjupc/article/details/49928911

  • 相关阅读:
    [转] ORACLE 错误编号表一
    基于CkEditor实现.net在线开发之路(1)
    跨行清算系统的实现原理
    应用程序域
    支付机构客户备付金存管办法
    数据库培训二期试题
    MYSQL开发规范
    详解线上线下收单业务(一)第三方支付
    Solr安装配置说明
    进程(Process)
  • 原文地址:https://www.cnblogs.com/hester/p/12126342.html
Copyright © 2011-2022 走看看