编码(decode与encode)
目錄
- 1. 什么是編碼
- 2. 編碼方式屬性
- 3. decode與encode
1. 什么是編碼
事實(shí)上計(jì)算機(jī)只認(rèn)0或1,然而卻可以通過計(jì)算機(jī)來顯示文本,這就是靠編碼來實(shí)現(xiàn)的。
編碼其實(shí)就是約定的一個(gè)協(xié)議,比如ASII編碼約定了大寫字母A對(duì)應(yīng)十進(jìn)制65,那么在讀取一個(gè)字符串的時(shí)候,看到65,計(jì)算機(jī)就知道這是大寫字母A的意思
由于計(jì)算機(jī)是美國(guó)發(fā)明的,所以這個(gè)ASCII編碼設(shè)計(jì)時(shí)只采用1個(gè)字節(jié)存儲(chǔ),包含了大小寫英文字母、數(shù)字和一些符號(hào)。但是計(jì)算機(jī)在全世界普及之后,ASCII編碼就成了一個(gè)瓶頸,因?yàn)?個(gè)字節(jié)是完全不足以表示各國(guó)語言的
大家知道英文只用26個(gè)字母就可以組成不同的單詞,而漢字光長(zhǎng)用字就有好幾千個(gè),至少需要2個(gè)字節(jié)才足以存放,所以后來中國(guó)制定了GB2312,用于對(duì)漢字進(jìn)行編碼
然后的然后日本,韓國(guó)也制定了各自的編碼,然后就出現(xiàn)沖突了,就導(dǎo)致了最初計(jì)算機(jī)上總是容易看到亂碼的現(xiàn)象
為了解決這個(gè)問題,Unicode編碼應(yīng)運(yùn)而生。Unicode組織的想法最初也很簡(jiǎn)單,創(chuàng)建一個(gè)足夠大的編碼,將所有國(guó)家的編碼都加進(jìn)來,進(jìn)行統(tǒng)一標(biāo)準(zhǔn)。
隨著問題的解決,新的問題也出現(xiàn)了,如果你寫的文本只包含英文和數(shù)字,那么用Unicode編碼就顯得特別浪費(fèi)存儲(chǔ)空間(使用ASCII編碼只占用一半的存儲(chǔ)空間),所以本著能省一點(diǎn)是一點(diǎn)的精神,Unicode還創(chuàng)造了多種實(shí)現(xiàn)方式
比如常見的UTF-8編碼就是Unicode的一種實(shí)現(xiàn)方式,它是可變長(zhǎng)編碼。
簡(jiǎn)單來說就是,當(dāng)文本是ASCII編碼的字符時(shí),它用1個(gè)字節(jié)存放;而當(dāng)文本是其他Unicode字符的情況,它將按一定的算法轉(zhuǎn)換,每個(gè)字符使用1~3個(gè)字節(jié)存放。
2. 編碼方式屬性
| GB2312編碼專門用來解決中文編碼的,是雙字節(jié)的,并且不論中英文都是雙字節(jié)的;包含全部中文字符;總的來說GB2312編碼方式的編碼是以中國(guó)國(guó)情而創(chuàng)造的,在國(guó)際上的兼容性不好。 | UTF-8 編碼是Unicode的一種實(shí)現(xiàn)方式,因?yàn)閷?duì)于大多數(shù)語言,只需要一個(gè)字節(jié)就能夠編碼,如果都采用Unicode會(huì)極大浪費(fèi),于是出現(xiàn)了可變長(zhǎng)編碼UTF-8。它對(duì)英文使用8位(即一個(gè)字節(jié)),中文使用24位(三個(gè)字節(jié))來編碼。另外,如果是外國(guó)人訪問你的GB2312網(wǎng)頁,需要下載中文語言包支持。訪問UTF-8編碼的網(wǎng)頁則不出現(xiàn)這問題。可以直接訪問。這也是為什么大多數(shù)的網(wǎng)頁是使用UTF-8編碼而不是GB2312。 | 目前幾乎收納了全世界大部分的字符。所有的字符都有唯一的編號(hào),這就解決了解碼的沖突!但是,unicode把大家都?xì)w納進(jìn)來,卻沒有為編碼的二進(jìn)制傳輸和二進(jìn)制解碼做出規(guī)定。 |
3. 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編碼。 |
該方法返回編碼后的字符串
u='我喜歡你啊!' str1=u.encode('gb2312') print(str1) # b'\xce\xd2\xcf\xb2\xbb\xb6\xc4\xe3\xb0\xa1\xa3\xa1'該方法返回解碼后的字符串
u='我喜歡你啊!' str1=u.encode('gb2312') print(str1.decode('gb2312')) # 我喜歡你啊!總結(jié)
以上是生活随笔為你收集整理的编码(decode与encode)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Quartus安装破解失败试了一些方法汇
- 下一篇: 四种大数据分析方法 ,大数据学习入门必须