python打開文件時提示“File was loaded in the wrong encoding:’UTF-8”根因調查


問題:練習CSV文件存儲時,查看文件內容時出現中文亂碼,如下圖所示:

 

 

 

首先解決這里中文顯示亂碼的問題:

解決方式一:選擇這里的“Reload in GBK”,然后就會發現文字正常顯示了,並且pycharm當前項目的設置中,子設置項File Encoding中,這個文件的編碼方式被特殊標記為了GBK。

 

 

關於File Encoding 這個子設置頁的說明:

Global Encoding :全局編碼方式

Project Encoding:當前項目編碼方式

白色區域下面的那一段英文的意思:為了改變pycharm中一個文件、目錄或者整個項目的編碼方式,添加其路徑並在編碼列表中選擇其編碼方式即可。內置的文件編碼(如:.JSP,.HTML,.XML)會覆蓋這里的說明。如果沒有說明,文件和目錄會繼承其父目錄或者整個項目的編碼方式。

這也就是為什么我們點擊“reload in GBK ”后,它會被加入到白色區域中成為其中一條的原因,因為這里有特殊說明,所以這個文件以后打開的時候,不再會繼承整個項目的編碼方式“UTF-8”了。而我們將這里的特殊說明刪除時,下次讀取這個文件時,仍舊會繼承Project Encoding的UTF-8,依然提示編碼有誤。

原因追查:

查看設置中發現pycharm中命名設置了項目和全局的編碼都是UTF-8啊,想着編碼都是UTF-8,而讀取時卻提示誤用了UTF-8編碼?難道文件寫入不是用的UTF-8?所以用它解碼才提示錯誤?那么提示用GBK,為什么要用GBK呢?是巧合呢還是因為寫入時就是GBK,所以才有這樣的提示?難道創建文件寫入時,沒有使用pycharm的編碼設置? 

既然推斷文件寫入可能根本沒有使用pycharm的編碼設置,就開始對File Encoding頁進行如下各種設置,以確定寫入的時候確實沒有受到pycharm中編碼的設置

1、全局是UTF-8,項目是GBK,打開文件時顯示正常

2、全局是UTF-8,項目也是UTF-8,打開文件時提示也是使用了UTF-8,顯示編碼錯誤

3、全局是GBK,項目也是GBK,顯示正常

4、全局GBK,項目是UTF-8,打開文件使用了UTF-8,顯示編碼錯誤

5、全局ShiftJIS,項目GBK,顯示正常,

無論Global Encoding是什么,Project Encoding是GBK就能讀取正常,其他則顯示錯誤,就算Global Encoding和Project Encoding都設置相同,讀取時仍舊顯示編碼錯誤,所以這里寫入文件根本沒有使用pycharm中File Encoding的設置!

繼續追查問題

既然寫入文件時不受IDE的影響,那么是不是問題出在open()函數呢?之后查看python官方文檔關於open()函數的說明發現果然是這樣,open()打開文件時,默認使用的編碼方式就是依賴於系統的,官方文檔如下:

 

 

 

意思就是:使用open()以文本模式打開文件時,如果編碼未指定,則使用的編碼是與平台相關的:調用locale.getpreferredencoding(False)可獲取當前的本地編碼。按照官方文檔的提示,獲取windows上系統默認編碼如下:

 

 

 注:CP936 就是 GBK,IBM 在發明 Code Page 的時候將 GBK 放在第 936 頁,所以叫 CP936。

所以根因是:因為open()函數在沒有指定編碼方式時,寫入文本使用的是系統默認編碼,也就是GBK,所以這就是為什么我之前無論怎么修改pycharm中Global Encoding與讀取時使用的Project Encoding一致,只要Project Encoding不是GBK就會顯示編碼錯誤的原因了


免責聲明!

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



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