utf-8和gbk

JunYu_coding發表於2021-01-02

爬蟲中文亂碼

**出現原因:**爬取的所有網頁無論何種編碼格式,都轉化為utf-8格式進行儲存,與原始碼編碼格式不同所以出現亂碼

****解釋:

UTF-8通用性比較好,是用以解決國際上字元的一種多位元組編碼,它對英文使用8位(即一個位元組),中文使用24位(三個位元組)來編碼。

UTF-8編碼的文字可以在各國各種支援UTF8字符集的瀏覽器上顯示,也就是必須兩者都是utf-8才行。

gbk是是國家編碼,通用性比UTF8差,GB2312之類的都算是gbk編碼。

GBK包含全部中文字元;UTF-8則包含全世界所有國家需要用到的字元。

unicode是一種二進位制編碼,所有utf-8和gbk編碼都得通過unicode編碼進行轉譯,即utf-8和gbk編碼之間不能直接轉換。附圖如下
在這裡插入圖片描述
python中編碼轉換用到了兩個函式decode()和encode()
  encode(‘iso-8859-1’) 是將gbk編碼編碼成unicode編碼
  decode(‘gbk’) 是從unicode編碼解碼成gbk字串
  轉換編碼都要先轉化成unicode 'iso–8859-1’

擴充:

**

  • GBK

**
簡單而言,GBK是對GB2312的進一步擴充套件(K是漢語拼音kuo zhan(擴充套件)中“擴”字的聲母),
收錄了21886個漢字和符號,完全相容GB2312。

  • GB18030

GB18030收錄了70244個漢字和字元,更加全面,與 GB 2312-1980 和 GBK 相容。
GB18030支援少數民族的漢字,也包含了繁體漢字和日韓漢字。
其編碼是單、雙、四位元組變長編碼的。

  • GB2312

當國人得到計算機後,那就要對漢字進行編碼。在ASCII碼錶的基礎上,小於127的字元意義與原來相同;而將兩個大於127的位元組連在一起,來表示漢字,前一個位元組從0xA1(161)到0xF7(247)共87個位元組,稱為高位元組,後一個位元組從0xA1(161)到0xFE(254)共94個位元組,稱為低位元組,兩者可組合出約8000種組合,用來表示6763個簡體漢字、數學符號、羅馬字母、日文字等。
在重新編碼的數字、標點、字母是兩位元組長的編碼,這些稱為“全形”字元;而原來在ASCII碼錶的127以下的稱為“半形”字元。
簡單而言,GB2312就是在ASCII基礎上的簡體漢字擴充套件。

  • UTF(UCS Transfer Format)

UTF是在網際網路上使用最廣的一種Unicode的實現方式。我們最常用的是UTF-8,表示每次8個位傳輸資料,除此之外還有UTF-16。
UTF-8長這樣,“你好中國!hello,123”:

你好中国!hello,123

你好中國!hello,123

  • Unicode

準確來說,Unicode不是編碼格式,而是字符集。這個字符集包含了世界上目前所有的符號。
另外,在原來有些字元可以用一個位元組即8位來表示的,在Unicode將所有字元的長度全部統一為16位,因此字元是定長的。
Unicode是長這樣的:

\u4f60\u597d\u4e2d\u56fd\uff01\u0068\u0065\u006c\u006c\u006f\uff0c\u0031\u0032\u0033

上面這段Unicode的意思是“你好中國!hello,123”。

相關文章