什么是字符編碼
字符集
簡單的說字符集就是一張表奕枢,一張存儲了文字和二進制對應(yīng)的表挣郭。
我們知道計算機存儲信息都是以二進制來存儲的,那么二進制又是用來表示我們所熟知的文字或者符號呢钠至?這就需要一個表來標注好對應(yīng)關(guān)系近哟。在以前我們擁有很多的字符集,因為每個國家的字符都不太一樣钱豁,都是各自為營制作字符集耻卡。后來有組織為了統(tǒng)一各個國家的字符,制作了Unicode
字符集牲尺,Unicode1.0版本在1991年10月發(fā)布卵酪。
我們來看一下GB2312簡體中文編碼表
這里列出一部分表:
code | +0 | +1 | +2 | +3 | +4 | +5 | +6 | +7 | +8 | +9 | +A | +B | +C | +D | +E | +F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
A1A0 | 、 | 谤碳。 | · | ˉ | ˇ | ¨ | 〃 | 々 | — | ~ | ‖ | … | ‘ | ’ | ||
A1B0 | “ | ” | 〔 | 〕 | 〈 | 〉 | 《 | 》 | 「 | 」 | 『 | 』 | 〖 | 〗 | 【 | 】 |
A1C0 | ± | × | ÷ | ∶ | ∧ | ∨ | ∑ | ∏ | ∪ | ∩ | ∈ | ∷ | √ | ⊥ | ∥ | ∠ |
其中溃卡、
這個對應(yīng)的編碼是A1A2
上面給出的是中國的GB2312編碼,但只適用于中文漢字蜒简。世界上有許多的語言瘸羡,為了統(tǒng)一標準就有人做一個字符集來包含幾乎所有的語言。這就是Unicode
字符編碼
編碼和字符集的不同在于搓茬,編碼其實是一種算法犹赖。
那既然我們已經(jīng)有了字符集了队他,為什么我們還需要字符編碼呢?
理論上我們其實只需要在計算機中存儲Unicode
這個字符集就夠了峻村。但實際情況是怎么樣的呢麸折?
舉個例子,我們存儲a
這個字母雀哨。Unicode字符集和UTF-8存儲對比
Unicode | 00000000 00000000 00000000 0110001 |
---|---|
UTF-8 | 01100001 |
我們發(fā)現(xiàn)UTF-8占的空間要少的多磕谅。
實際情況是因為那個時候的計算機存儲不像現(xiàn)在有這么大,為了考慮到存儲空間的限制雾棺,我們需要一個算法來減少字符集的存儲空間〔布校現(xiàn)在我們一直使用的UTF-8
就是字符編碼。
字符集和字符編碼的關(guān)系
像我們上文所說的 Unicode
和 UTF-8
捌浩,Unicode
是幾乎涵蓋了各個國家的文字和字符放刨,UTF-8
則是目前用的最廣的字符編碼。UTF-8是為了減少Unicode的存儲空間而設(shè)計的一種算法尸饺。
參考
字符編碼
十分鐘搞清字符集和字符編碼
字符集和字符編碼
字符集歷史和亂碼問題(一)
字符集歷史和亂碼問題(二)
本博客著作權(quán)歸從這到那所有进统,轉(zhuǎn)載請注明出處