常用编码与为何要encode和decode
目錄
(小拓展):
(一)ASCII 碼
(二)Unicode 碼
(三)UTF-8 碼
(四)總結(jié)與encode、decode
(小拓展):
下面是每個(gè)字符對(duì)應(yīng)的編號(hào),字符0~9對(duì)應(yīng)編號(hào)48~57,就是說(shuō)ASCII碼全是字符!
我們鍵盤上每個(gè)鍵都對(duì)應(yīng)一個(gè)ascii碼,這也就是為什么python中input('請(qǐng)輸入一個(gè)數(shù)')得到的是字符,我們還得把它轉(zhuǎn)換成int的原因了
(一)ASCII 碼
ASCII 碼 表示 127 個(gè)英文字符
ASCII 碼最先出現(xiàn),最初只適合英語(yǔ)
隨著計(jì)算機(jī)普及,各國(guó)家語(yǔ)言不同,文字多少更是不同,127個(gè)根本不夠用。各國(guó)都要為自己的語(yǔ)言編碼。
中國(guó)自己的編碼是gbk,每個(gè)中文需要使用兩個(gè)字節(jié)來(lái)編碼,中文編碼的規(guī)則 —— GB2312? (都是常用漢字),比如高考報(bào)名時(shí)有的學(xué)生姓名輸入是亂碼,就是因?yàn)榻逃坑玫腉B2312,而他的名字中有個(gè)太偏僻的字。
由于不同國(guó)家有不同的編碼規(guī)則,如日本,韓國(guó)都使用各自國(guó)家的編碼規(guī)則,在多語(yǔ)言
混用的場(chǎng)合會(huì)出現(xiàn)混亂。怎么解決?
(二)Unicode 碼
Unicode 用來(lái)把所有語(yǔ)言都統(tǒng)一到一套編碼里,這樣就不會(huì)再有亂碼問(wèn)題了。
Unicode通常用兩個(gè)字節(jié)編碼(有的也用四個(gè)字節(jié)),而 ASCII 碼通常用一個(gè)字節(jié)字節(jié)。ASCII 碼轉(zhuǎn)
換成 Unicode 在前面一個(gè)字節(jié)補(bǔ) 0
Unicode碼雖然全面,但是用起來(lái)笨重,比如說(shuō)我就是想傳個(gè)1到服務(wù)器,你還要給我用兩個(gè)字節(jié)編碼么?傳額外15個(gè)0?
(三)UTF-8 碼
UTF-8 把unicode進(jìn)行優(yōu)化,減小了硬盤存儲(chǔ)空間浪費(fèi)與傳輸效率低下
不過(guò)在內(nèi)存中都要轉(zhuǎn)換成unicode
UTF-8 編碼把一個(gè) Unicode 字符根據(jù)不同的數(shù)字大小編碼成 1-6 個(gè)字節(jié),常用的英文字
母被編碼成 1 個(gè)字節(jié),漢字通常是 3 個(gè)字節(jié),只有很生僻的字符才會(huì)被編碼成 4-6 個(gè)字節(jié)。
如果你要傳輸?shù)奈谋景罅坑⑽淖址?#xff0c;用 UTF-8 編碼就能節(jié)省空間。
UTF-8 的一個(gè)好處在于,原有的 ASCII 的編碼可以在 UTF-8 下繼續(xù)工作。
(四)總結(jié)與encode、decode
搞清楚了 ASCII、Unicode 和 UTF-8 的關(guān)系,我們就可以總結(jié)一下現(xiàn)在計(jì)算機(jī)系統(tǒng)通用
的字符編碼工作方式:
在計(jì)算機(jī)內(nèi)存中,統(tǒng)一使用 Unicode 編碼,當(dāng)需要保存到硬盤或者需要傳輸?shù)臅r(shí)候,
就轉(zhuǎn)換為 UTF-8 編碼。
用記事本編輯的時(shí)候,從文件讀取的 UTF-8 字符被轉(zhuǎn)換為 Unicode 字符到內(nèi)存里,編
輯完成后,保存的時(shí)候再把 Unicode 轉(zhuǎn)換為 UTF-8 保存到文件:rw-file-utf-8
瀏覽網(wǎng)頁(yè)的時(shí)候,服務(wù)器會(huì)把動(dòng)態(tài)生成的 Unicode 內(nèi)容轉(zhuǎn)換為 UTF-8 再傳輸?shù)綖g覽器:
web-utf-8
所以你看到很多網(wǎng)頁(yè)的源碼上會(huì)有類似的信息,表示該網(wǎng)頁(yè)正是用的 UTF-8 編碼。
首先要搞清楚,字符串在 Python 內(nèi)部的表示是 unicode 編碼,因此,在做編碼轉(zhuǎn)換時(shí),
通常需要以 unicode 作為中間編碼,即先將其他編碼的字符串解碼(decode)成 unicode,
再?gòu)?unicode 編碼(encode)成另一種編碼。
1.decode:其它碼-->unicode
decode 的作用是將其他編碼的字符串轉(zhuǎn)換成 unicode 編碼,如 str1.decode(‘gb2312’),表
示將 gb2312 編碼的字符串轉(zhuǎn)換成 unicode 編碼。
2.encode:unicode-->其它碼
encode 的作用是將 unicode 編碼轉(zhuǎn)換成其他編碼的字符串,如 str2.encode(‘gb2312’),表
示將 unicode 編碼的字符串轉(zhuǎn)換成 gb2312 編碼。
總結(jié)
以上是生活随笔為你收集整理的常用编码与为何要encode和decode的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python read_csv函数_Py
- 下一篇: java ini_Java读取ini文件