Python 各種編碼

2021-07-27 09:58:37 字數 2027 閱讀 6049

問題:做twitter資料去停用詞的處理,遇到「unicodedecodeerror: 'gbk' codec can't decode byte 0xbf in position 2: illegal multibyte sequence」的錯誤

分析:終端預設的編碼格式是gbk當呼叫print函式將內容格式化輸出到終端時,會將unicode物件轉換為終端的編碼方式輸出,如上面第一次print的結果是正常的,print utf8位元組流時,終端按其預設gbk解碼顯示時就會出問題,即在windows下python使用open()函式開啟檔案時會預設使用gbk解碼,即使檔案本身儲存為utf-8格式——指定以utf-8解碼方式開啟此檔案,這樣就避免瞭解碼錯誤,如「open('temp.txt','r',encoding='utf-8')」

感謝原作者

可表示阿拉伯數字、字母在內的128個不同字元。很明顯,漢字在ascii中是無法表示的。

ascii碼一共規定了128個字元的編碼,比如a是65(二進位制01000001)。這128個符號(包括32個不能列印出來的控制符號),只占用了乙個位元組的後面7位,最前面的1位統一規定為0。

對於英語來說128個字元就已經夠用了,但是對於其他語言來說卻不夠。因此針對不同的語言先後出現了多種編碼方式,例如針對中文的gb2312gbk編碼,針對中文繁體的big5編碼等等,這些編碼方式都使用多個位元組表示乙個字元。

隨著越來越多的編碼方式的出現,急需一種能夠包含全世界所有符號的編碼系統來消滅亂碼,這種編碼系統就叫做unicode。unicode只是一套編碼系統,包含所有字符集,卻並不規定編碼後的二進位制**如何儲存。

utf-32:使用4個位元組儲存每乙個字元,但是對於英文本元來說,使用ascii編碼只需1個位元組即可儲存,這極大的浪費了儲存空間。 

utf-8:因此出現了一種變長的編碼方式utf-8,utf-8是使用得最廣泛的unicode編碼實現方式,python 3的預設編碼方式是utf-8,使用1-4個位元組表示乙個字元,根據不同的字元變化長度。比如對於英文本元,1個位元組就夠了,但是對於中文,可能需要2-4個位元組才能儲存。

base64是網路上最常見的用於傳輸8bit位元組**的編碼方式,可用於在http環境下傳遞較長的標識資訊。採用base64編碼具有不可讀性,可用作簡單的加密方式。

編碼encode():真實字元與二進位制串的對應關係,真實字元→二進位制串,如

result=result.encode('utf-8') 以utf-8編碼 、讀寫檔案的時候多加個引數來設定字元編碼:open('test.txt', 'r', encoding='utf-8')

從unicode轉str,被看做是把乙個資訊文字編碼為二進位制位元組流的過程,要用encode方法

解碼decode():二進位制串與真實字元的對應關係,二進位制串→真實字元,如

result=result.decode('gbk',

'ignore'

)  以gbk解碼,

忽略其中有異常的編碼,僅顯示有效的編碼

其他博主整理 

可以通過以下**檢視python 3的字串預設編碼:

import sys

sys.getdefaultencoding()

python 3的預設編碼方式是utf-8。

使用python直譯器進行如下編碼解碼操作,在bytes和str之間轉換:

>>> '中'.encode()

b'\xe4\xb8\xad'

>>> b'\xe4\xb8\xad'.decode('utf-8')

'中'用python以二進位制的形式寫入檔案時,需要先將字串編碼成位元組串,然後再寫入檔案。以二進位制的形式讀取檔案時也是如此,需要將讀取的位元組串解碼成字串。

各種編碼彙總

1.解釋url編碼是一種瀏覽器用來打包表單輸入的格式 url 只能使用 ascii 字符集來通過網際網路進行傳送。由於 url 常常會包含 ascii 集合之外的字元,url 必須轉換為有效的 ascii 格式。url 編碼使用 其後跟隨兩位的十六進製制數來替換非 ascii 字元 url 不能包含...

python3 0中各種編碼問題

目前python2.0還在使用,但可以看出python3.0才是未來的主流。因此本文主要研究的是python3中的各編碼問題。unicodeencodeerror錯誤 字元編碼錯誤 在python2中,系統預設的編碼方式是 ascii碼。字母 標點和其他字元只使用乙個位元組來表示,但對於中文字元來說...

各種語音編碼總結

g.726有四種位元速率 32,24,16 kbit s adaptive differential pulse code modulation adpcm 最為常用的方式是 32 kbit s,但由於其只是 g.711速率的一半,所以可將網路的可利用空間增加了一倍。g.726具體規定了乙個 64 ...