python讀取文本txt文件亂碼問題


python2的編碼實在是個頭疼的問題,編碼問題也將作為一個長期的話題,遇到問題隨時補充。

這次的問題比較簡單,是在做詞雲wordcloud的時候發現的,作用就是從文本文件中讀取文字,將其制作成詞雲。部分代碼如下:

 1 import chardet
 2 from wordcloud import WordCloud
 3 import matplotlib.pyplot as plt
 4 
 5 with open("C:\\Users\\fyc\\Desktop\\json.txt", "r") as f:
 6     text = f.read()
 7 type = chardet.detect(text)
 8 text1 = text.decode(type["encoding"])
 9 text2 = "".join(text1)
10 print text
11 print text1
12 print text2
13 
14 wordcloud = WordCloud(
15     background_color="white",
16     width=1000,
17     height=860,
18     margin=2).generate(text2)
19 
20 plt.imshow(wordcloud)
21 plt.axis("off")
22 plt.show()

 

我們只關注5,6,7,8這四行代碼,我在14行打了斷點,觀察讀取的內容

很明顯,直接讀取,text是str類型,完全是亂碼,text1做了處理,顯示正常。

在這我們隆重介紹 python 內建模塊  chardet模塊,編碼檢測。這個模塊可以檢測出一行字符是什么編碼,我們看一下text的編碼,如下:

chardet模塊的detect方法返回一個字典,其中的“encoding",明顯的指出,這個是”GB2312"編碼,接下來我們會心一笑,可以用decode來解碼了,解碼完應該就是正常顯示了。

 

 所以我們用了上面的這一句,那么今后所有的讀取文件地方,在顯示之前,我們都可以用chardet檢測一下字符串的編碼,相應解碼。就可以避免文件亂碼的情況了

 


免責聲明!

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



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