python声明编码为gbk_Python字符串编码坑彻底详细解决
來源:實習僧
作者:實習僧的何梁
真正完全搞清楚Python的編碼問題
我想大家經常被Python的編碼問題搞的暈頭轉向,下面我一頭來自實習僧的牛,為您詳細解析這個天坑:
請看圖:
1、python中一切皆對象,字符對象分為兩種,一種是unicode對象,一種是str對象。
2、python中字符是unicode為基礎的,所以平時我們的字符串,也就是str在python內存中其實是以unicode編碼存儲的。
3、所以我們平時print一個字符串的時候,看到的是中文,但是如果你把這個字符串放在list里(就是外面加上[ ]),再print,就能看到原生的編碼了。因為前面說了,在python內存存儲中都是以unicode存儲的,所以放在List里面,打印就能看見原生的存儲模式。
4、str是字符串對象,但是可以有很多不同的編碼,utf-8,gbk,ascii,都是編碼。
5、不同編碼的str對象,互相不能直接轉換,也就是說utf-8編碼的不能直接轉換成gbk的。
6、但是不同編碼的str對象都可以解碼成unicode對象,因為一切數據在Python都是以unicode存儲的,str.decode(編碼類型)
7、unicode對象也可以編碼成任意一種編碼的str對象。 unicode.encode('編碼類型')
8、所以不同編碼的str對象可以先解碼(decode)成unicode 再編碼(encode)成其他編碼的str對象。
9、utf-8包含國際上所有字符的編碼,GBK主要包含全部中文字符,所以說我們大家愛用utf-8,因為全。
10、所以說utf-8中有一些字符,gbk沒有,所以有一些Utf-8解碼后再編碼成gbk后會報錯,因為gbk沒有那種字符。
11、有一些str中可能混著有gbk,utf-8等好幾種編碼,所以有時候decode的時候會報錯,因為你按照gbk解碼,可能里面又包含了一種不識別的utf-8碼得到。
12、以上兩條,有沒有只編碼或者解碼對的啊,錯誤的字符就跳過?
13、有,decode('utf-8','ignore'),encode('utf-8','ignore') 加一個'ignore'參數 就會忽略錯誤。
14、在python中可以使用chardet.detect(str)來檢測一個str是什么編碼的:
15、chardet.detect(str)有一個缺點就是,他是根據概率來的,比如如果字符串是'aaaaaa你',前面的單字符就會判斷為其他編碼,因為單字母本身就是其他編碼都支持,所以:
#ISO-8859-2 西歐字符集
16、print str 或者 unicode 都會顯示出正常的文字,但是python中直接顯示 str是'\xe3\xbd'這種字符,unicode是 u'\u4f60' 這種的
17、大家可以在自己本機上多試試。
●本文編號2201,以后想閱讀這篇文章直接輸入2201即可。
●本文分類“Python”,搜索分類名可以獲得相關文章。
●輸入m可以獲取到文章目錄
本文內容的相關公眾號推薦Python編程↓↓↓
Linux學習↓↓↓
更多推薦《
總結
以上是生活随笔為你收集整理的python声明编码为gbk_Python字符串编码坑彻底详细解决的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 松下就蜂窝通信标准必要专利起诉小米和 O
- 下一篇: 米游社怎么改名