编码方式 / ASCII、UNICODE、UTF-8、ANSI
一、ASCII
| 字符 | ASCII碼 |
| ‘0’ | 48 |
| ‘A’ | 65 |
| ‘a(chǎn)’ | 97 |
二、UNICODE (Universal Code)
Unicode 只是一個符號集,它只規(guī)定了字符與二進制代碼的對應(yīng)關(guān)系,卻沒有規(guī)定這個二進制代碼存儲方式。也就是說有的字符可能占一個字節(jié),有的可能占用 2 個、3 個或者更多。因為計算機無法知道內(nèi)存中三個字節(jié)代表是一個字符還是兩個還是三個,所以最好能夠統(tǒng)一字節(jié)數(shù)目,但是如果統(tǒng)一為 3 個字節(jié)的話,ASCII碼字符對應(yīng)的二進制前面兩個字節(jié)都得填充 0,這對存儲空間是一個極大的浪費。為了解決上述問題,出現(xiàn)了很多 unicode 的很多實現(xiàn)方法,例如:utf-8、utf-16、utf-32。
三、UTF-8
1、全稱:UCS Transformation Format 8bit。
2、Unicode 編碼范圍是:0-0x10FFFF。
這是一種占用的字節(jié)可以變長的編碼方式,這個方案的意思以 8 位為單位來標(biāo)識文字。編碼規(guī)則如下。
| Unicode 編碼(16進制) | UTF-8 字節(jié)流(二進制) |
| 000000 - 00007F | 0XXXXXXX |
| 000080 - 0007FF | 110XXXXX 10XXXXXX |
| 000800 - 00FFFF | 1110XXXX 10XXXXXX 10XXXXXX |
| 010000 - 10FFFF | 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX |
(1)對于單字節(jié)的字符,第一位為 0,其他位為 unicode 編碼(與ASCII相同)。
(2)對于多字節(jié)(n)的字符,從左往右數(shù),第一個字節(jié)的前 n 位為,第(n+1)位為 0,后面的字節(jié)的前兩位分別是1和0,其他各位依次填入 UNICODE 編碼,剩余位置填 0 。
栗子:
字符“人”的 unicode 編碼為 0x4eba,其二進制為100111010111010,由此可知其一共占用了16位,故UTF-8的實現(xiàn)方法是:11100100 10111010 10111010。
上述中,雙星號括起來的部分為unicode編碼,其他部分為UTF-8的規(guī)則位。
四、UTF-16、UTF-32
任何字符都是使用 2 個字節(jié)或者 4 個字節(jié)存儲。
上述字符“人”的 UTF-16 的是實現(xiàn)方式為 100111010111010 。
上述字符“人”的 UTF-32 的是實現(xiàn)方式為 0000000000000000100111010111010 。
五、UTF-8 和 UTF-16 的優(yōu)缺點
六、ANSI 編碼
不同的國家和地區(qū)制定了不同的標(biāo)準(zhǔn),由此產(chǎn)生了 GB2312、GBK、GB18030、Big5、Shift_JIS 等各自的編碼標(biāo)準(zhǔn)。這些使用多個字節(jié)來代表一個字符的各種漢字延伸編碼方式,稱為 ANSI 編碼。在簡體中文? Windows 操作系統(tǒng)中,ANSI 編碼代表 GBK 編碼;在繁體中文 Windows 操作系統(tǒng)中,ANSI編碼代表 Big5;在日文 Windows 操作系統(tǒng)中,ANSI 編碼代表 Shift_JIS 編碼。ANSI 編碼表示英文字符時用一個字節(jié),表示中文用兩個或四個字節(jié)。
?
(SAW:Game Over!)
總結(jié)
以上是生活随笔為你收集整理的编码方式 / ASCII、UNICODE、UTF-8、ANSI的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux / 惊群效应
- 下一篇: C/Cpp / STL / map 和