python utf-8 亂碼 python編碼問題總結


亂碼原因:
因為你的文件聲明為utf-8,並且也應該是用utf-8的編碼保存的源文件。但是windows的本地默認編碼是cp936,也就是gbk編碼,所以在控制台

直接打印utf-8的字符串當然是亂碼了。 

解決方法:
在控制台打印的地方用一個轉碼就ok了,打印的時候這么寫:
print myname.decode('UTF-8').encode('GBK') 

比較通用的方法應該是:
import sys
type = sys.getfilesystemencoding()
print myname.decode('UTF-8').encode(type)

 

 

 

最近利用python抓取一些網上的數據,遇到了編碼的問題。非常頭痛,總結一下用到的解決方案。

  •     linux中vim下查看文件編碼的命令 set fileencoding
  •     python中一個強力的編碼檢測包 chardet ,使用方法非常簡單。linux下利用pip install chardet實現簡單安裝

    

1
2
3
4
import  chardet
=  open ( 'file' , 'r' )
fencoding = chardet.detect(f.read())
print  fencoding

  fencoding輸出格式 {'confidence': 0.96630842899499614, 'encoding': 'GB2312'} ,只能判斷是否為某種編碼的概率。比較准確的結果了。輸入參數為str類型。

  •       了解python中str的編碼后可以利用decode和encode來實現編碼的轉換。

      一般流程是str利用decode方法根據str的編碼將其解碼為unicode字符串類型,然后利用encode根據特定的編碼將unicode字符串類型轉換為特定的編碼。python中str和unicode屬於兩種不同的類型,如下。

     

  •  一般情況下window默認編碼gbk,linux默認編碼utf8
  •  python編程中 系統編碼,python編碼,文件編碼 的概念。

     系統編碼:默認寫源碼的編輯器的編碼方式。它代表源碼文件內的所有內容都是根據詞方式編碼成二進制碼流。存入到磁盤中的。linux下通過locale命令查看。

     python編碼:指python內設置的解碼方式。如果不設定的話,python默認的是ascii解碼方式。如果python源代碼文件中不出現中文的話,這個地方怎么設定應該不會問題。

     設定方法:在源碼文件開頭(一定是第一行):#-*-coding:UTF-8-*-,源碼文件的設置解碼方式是UTF-8 或者

1
2
3
import  sys
reload (sys)
sys.setdefaultencoding( 'UTF-8' )

     文件編碼:文本的編碼方式,linux下vim利用set fileencoding查看。

    

  •     一般情況下輸出亂碼的原因就是 沒有按照系統解碼的方式進行編碼。

    比如print s, s類型為str,linux系統下系統默認編碼為utf8編碼,s在輸出前就應該編碼為utf8。如果s為gbk編碼就應該這樣輸出。print s.decode('gbk').encode('utf8')才能輸出中文。

    window下面情況相同,window默認編碼為gbk編碼,所以s輸出前必須編碼為gbk。

  •     python處理中一般處理unicode類型。這樣輸出前直接編碼即可。


免責聲明!

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



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