python2的編碼實在是個頭疼的問題,編碼問題也將做爲一個長期的話題,遇到問題隨時補充。python
此次的問題比較簡單,是在作詞雲wordcloud的時候發現的,做用就是從文本文件中讀取文字,將其製做成詞雲。部分代碼以下:json
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作了處理,顯示正常。spa
在這咱們隆重介紹 python 內建模塊 chardet模塊,編碼檢測。這個模塊能夠檢測出一行字符是什麼編碼,咱們看一下text的編碼,以下:code
chardet模塊的detect方法返回一個字典,其中的「encoding",明顯的指出,這個是」GB2312"編碼,接下來咱們會心一笑,能夠用decode來解碼了,解碼完應該就是正常顯示了。blog
因此咱們用了上面的這一句,那麼從此全部的讀取文件地方,在顯示以前,咱們均可以用chardet檢測一下字符串的編碼,相應解碼。就能夠避免文件亂碼的狀況了字符串