Python | 多種編碼文件(中文)亂碼問題解決


 

 
  1. 1

    可以知道的是,文本文件的默認編碼並不是utf8。

    我們打開一個文本文件,並點擊另存為

     
  2. 2

    我們在新窗口的編碼一欄看到默認編碼是ANSI。先不管這個編碼是什么編碼,但是通過下拉列表我們知道,這種編碼不是utf8。

     
     
    END

編碼測試

 
  1. 1

    對於Python里面的中文顯示,我們常常使用utf8和gbk的編碼。對於這兩種編碼筆者就不介紹了,總之都是專門可以處理中文的編碼方式啦。

     
  2. 我們首先對文本文件測試了gbk解碼。我們發現,此編碼下文本文件內容可以正常顯示,但是使用utf8解碼,程序出錯,拋出decodeError異常

     
  3. 3

    同樣的,我們對Python腳本文件測試了utf8解碼。我們發現,此編碼下文本文件內容可以正常顯示,但是使用gbk解碼,中文部分出現亂碼

     
  4. 4

    測試說明,對於文本文件需要使用gbk解碼,而對於腳本文件需要utf8解碼,也就是說,文本文件是gbk編碼的,而腳本則是utf8

    END

解決法一:異常處理

 
  • 我們從上面的編碼測試發現,文本文件在使用utf8解碼時會拋出異常,所以我們在代碼中可以做如下處理——也就是在異常拋出時采用gbk解碼

     
  • 經過測試,發現程序可以滿足兩種文件正常顯示

     
    END

解決法二:文件類型

 
  • 因為確定是這兩種文件,所以可以直接判斷文件類型選擇對應解碼了。經過測試,也成功了。

     
     
    END

終極解法:chardet

 
  1.  

    chardet模塊可以檢測字符編碼,應該說是類似問題的終極解決。先安裝一下

     
     
  2.  

    通過下面代碼測試一下兩種文件的編碼。我們看到,通過chardet模塊返回的是一個字典。字典的前一個元素是編碼檢查的概率,后一個是編碼類型

     
     
  3.  

    我們看到,文本文件的編碼方式是GB2312,而我們上面使用gbk的解碼也是可以的,那是因為gb2312是gbk的一個子集(GBK/1、GBK/2是GB2312區域)

     
  4.  

    現在我們修改一下最終的代碼,把這個編碼問題解決掉~

     
  5.  原文鏈接 https://jingyan.baidu.com/article/425e69e6e111a1be15fc1609.html


免責聲明!

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



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