判斷文件編碼方式


一、實驗環境

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM