字符與編碼

本周開始學(xué)習(xí)一些萬維網(wǎng)和計(jì)算機(jī)的基礎(chǔ)知識,了解網(wǎng)頁的發(fā)展和簡單了解計(jì)算機(jī)是如何儲存和解釋數(shù)據(jù)的。
正如方方老師所說:

首先你是程序員,然后才是前端

所以,字符和編碼是程序員的必修課。

字符與編碼的概念

首先,我們了解一下維基百科中關(guān)于字符編碼的定義:

字符編碼(英語:Character encoding)、字集碼是把字符集中的字符編碼為指定集合中某一對象(例如:比特模式、自然數(shù)序列、8位組或者電脈沖),以便文本在計(jì)算機(jī)中存儲和通過通信網(wǎng)絡(luò)的傳遞。
字集碼是把字符集中的字符編碼為指定集合中某一對象(例如:比特模式、自然數(shù)序列、8位組或者電脈沖),以便文本在計(jì)算機(jī)中存儲和通過通信網(wǎng)絡(luò)的傳遞。常見的例子包括將拉丁字母表編碼成摩斯電碼和ASCII。
其中,ASCII將字母、數(shù)字和其它符號編號,并用7比特的二進(jìn)制來表示這個(gè)整數(shù)。通常會額外使用一個(gè)擴(kuò)充的比特,以便于以1個(gè)字節(jié)的方式存儲。 ——維基百科

簡單而言,字符集是一定字符的集合,規(guī)定了字符對應(yīng)二進(jìn)制數(shù)字的表示,以便儲存在計(jì)算中。
編碼則是字符集和實(shí)際儲存數(shù)值之間的轉(zhuǎn)換關(guān)系。

編碼字符的來由

0和1

計(jì)算機(jī)作為機(jī)器,必須通電才能使用,由于電子器件只有開閉合兩種狀態(tài),計(jì)算機(jī)中通過這兩種狀態(tài)可以表示為0和1,于是,0和1這樣的二進(jìn)制表示方式則成為是計(jì)算機(jī)數(shù)據(jù)儲存的基本表示。
我們可以將計(jì)算機(jī)想象成一個(gè)由眾多燈泡組合成的機(jī)器,數(shù)據(jù)則是由這些燈泡的開關(guān)組合排列表示而成。

我們知道了,在計(jì)算機(jī)內(nèi)部,所有的信息最終都表示為一個(gè)二進(jìn)制的字符串。每一個(gè)二進(jìn)制位(bit)都有0和1兩種狀態(tài),八個(gè)二進(jìn)制位剛好能組合出256種狀態(tài),這被稱為一個(gè)字節(jié)(byte),字節(jié)則被作為計(jì)算機(jī)信息計(jì)量的基本單位。一個(gè)字節(jié)可以表示出256種狀態(tài),每一個(gè)狀態(tài)對應(yīng)一個(gè)符號,就是256個(gè)符號,從0000000到11111111。

01和英文的轉(zhuǎn)換——ACSII

由于數(shù)字并不能表示為其他語言,為了在計(jì)算機(jī)中表示出人們需要的信息,數(shù)字必須被轉(zhuǎn)換成其他的語言,于是就有了編碼需求。1967年,美國制定了一套字符編碼,對英語字符與二進(jìn)制位之間的關(guān)系,做了統(tǒng)一規(guī)定。這被稱為ASCII編碼,一直沿用至今。
ASCII碼一共規(guī)定了128個(gè)字符的編碼,比如空格"SPACE"是32(二進(jìn)制00100000),大寫的字母A是65(二進(jìn)制01000001)。這128個(gè)符號(包括32個(gè)不能打印出來的控制符號),只占用了一個(gè)字節(jié)的后面7位,最前面的1位統(tǒng)一規(guī)定為0。

收納更多的字符——Unicode

雖然英語下,128個(gè)字符已經(jīng)能夠表達(dá)完,但表達(dá)其他語言是不夠的。比如中文漢字,常用的漢字就超過3500個(gè),于是一些國家和組織就決定自己制定編碼的標(biāo)準(zhǔn)。比如,我國有GBK,GB2312等字符集。

但是,問題來了,世界上存在多種編碼方式,同一組二進(jìn)制數(shù)字會根據(jù)編碼的不同被解釋成不同的符號,所以當(dāng)我們打開一個(gè)文本時(shí),必須知道它的編碼方式,否則可能出現(xiàn)以錯(cuò)誤的方式解讀得到不正確的內(nèi)容。不知道大家是否也有同樣的經(jīng)驗(yàn),小時(shí)候打開網(wǎng)頁時(shí)經(jīng)常會遇到亂碼的情況,這就是解讀時(shí)的編碼方式不正確導(dǎo)致的。

為了解決這個(gè)問題,由統(tǒng)一碼聯(lián)盟和國際標(biāo)準(zhǔn)化組織協(xié)作制定的通用字符集(Unicode)成為計(jì)算機(jī)領(lǐng)域重要的字符集,其意圖收納全世界所有的字符。截止2016年6月,已經(jīng)收納了超過12萬字符。Unicode為每一個(gè)字符而非字形定義唯一的代碼(即一個(gè)整數(shù)),以一個(gè)抽象的形式(數(shù)字)來處理字符,而視覺上的顯示,則交給其他軟件(瀏覽器、文字處理器)來處理。

為了更好的儲存——UTF-8

未完待續(xù)。。

參考:
十分鐘搞清字符集和字符編碼
字符編碼筆記:ASCII,Unicode和UTF-8
字符編碼——維基百科

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容