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