1. 什么是編碼事實上計算機只認0或1,然而卻可以通過計算機來顯示文本,這就是靠編碼來實現(xiàn)的。 編碼其實就是約定的一個協(xié)議,比如ASII編碼約定了大寫字母A對應十進制65,那么在讀取一個字符串的時候,看到65,計算機就知道這是大寫字母A的意思 由于計算機是美國發(fā)明的,所以這個ASCII編碼設計時只采用1個字節(jié)存儲,包含了大小寫英文字母、數(shù)字和一些符號。但是計算機在全世界普及之后,ASCII編碼就成了一個瓶頸,因為1個字節(jié)是完全不足以表示各國語言的 大家知道英文只用26個字母就可以組成不同的單詞,而漢字光長用字就有好幾千個,至少需要2個字節(jié)才足以存放,所以后來中國制定了GB2312,用于對漢字進行編碼 然后的然后日本,韓國也制定了各自的編碼,然后就出現(xiàn)沖突了,就導致了最初計算機上總是容易看到亂碼的現(xiàn)象 為了解決這個問題,Unicode編碼應運而生。Unicode組織的想法最初也很簡單,創(chuàng)建一個足夠大的編碼,將所有國家的編碼都加進來,進行統(tǒng)一標準。 隨著問題的解決,新的問題也出現(xiàn)了,如果你寫的文本只包含英文和數(shù)字,那么用Unicode編碼就顯得特別浪費存儲空間(使用ASCII編碼只占用一半的存儲空間),所以本著能省一點是一點的精神,Unicode還創(chuàng)造了多種實現(xiàn)方式 比如常見的UTF-8編碼就是Unicode的一種實現(xiàn)方式,它是可變長編碼。 簡單來說就是,當文本是ASCII編碼的字符時,它用1個字節(jié)存放;而當文本是其他Unicode字符的情況,它將按一定的算法轉(zhuǎn)換,每個字符使用1~3個字節(jié)存放。 2. 編碼方式屬性GB2312 | UTF-8 | Unicode |
---|
GB2312編碼專門用來解決中文編碼的,是雙字節(jié)的,并且不論中英文都是雙字節(jié)的;包含全部中文字符;總的來說GB2312編碼方式的編碼是以中國國情而創(chuàng)造的,在國際上的兼容性不好。 | UTF-8 編碼是Unicode的一種實現(xiàn)方式,因為對于大多數(shù)語言,只需要一個字節(jié)就能夠編碼,如果都采用Unicode會極大浪費,于是出現(xiàn)了可變長編碼UTF-8。它對英文使用8位(即一個字節(jié)),中文使用24位(三個字節(jié))來編碼。另外,如果是外國人訪問你的GB2312網(wǎng)頁,需要下載中文語言包支持。訪問UTF-8編碼的網(wǎng)頁則不出現(xiàn)這問題。可以直接訪問。這也是為什么大多數(shù)的網(wǎng)頁是使用UTF-8編碼而不是GB2312。 | 目前幾乎收納了全世界大部分的字符。所有的字符都有唯一的編號,這就解決了解碼的沖突!但是,unicode把大家都歸納進來,卻沒有為編碼的二進制傳輸和二進制解碼做出規(guī)定。 |
decode | encode |
---|
decode的作用是將其他編碼的字符串轉(zhuǎn)換成unicode編碼,如str1.decode('gb2312’),表示將gbk編碼的字符串str1轉(zhuǎn)換成unicode編碼。 | encode的作用是將unicode編碼轉(zhuǎn)換成其他編碼的字符串,如str2.encode('gb2312’),表示將unicode編碼的字符串str2轉(zhuǎn)換成gbk編碼。 |
encode:用于編碼
str.encode(encoding='UTF-8',errors='strict')# encoding -- 要使用的編碼,如'UTF-8'# errors -- 設置不同錯誤的處理方案
該方法返回編碼后的字符串 u='我喜歡你啊!'str1=u.encode('gb2312')print(str1) # b'\xce\xd2\xcf\xb2\xbb\xb6\xc4\xe3\xb0\xa1\xa3\xa1' decode:encoding 指定的編碼格式解碼字符串。默認編碼為字符串編碼
str.decode(encoding='UTF-8',errors='strict')# encoding -- 要使用的編碼,如'UTF-8'# errors -- 設置不同錯誤的處理方案
該方法返回解碼后的字符串 u='我喜歡你啊!'str1=u.encode('gb2312')print(str1.decode('gb2312'))# 我喜歡你啊!
|