字符集和字符编码的学习
文章目錄
- 標準 ASCII
- 擴展 ASCII
- GB2312 編碼
- GBK 編碼
- GB18030 編碼
- Unicode 編碼
- UCS-2 字符集
- UCS-4 字符集
- UTF-8 編碼
先有字符集,然后對每個字符進行編碼,這叫字符編碼,不同的編碼規則就產生了不同的編碼方案。
標準 ASCII
標準 ASCII 碼也叫基礎 ASCII 碼,使用 7 位二進制數(剩下的1位二進制為0)來表示所有的大寫和小寫字母,數字 0 到 9、標點符號,以及在美式英語中使用的特殊控制字符。
ASCII 編碼是直接將 ASCII 字符集的碼位轉換成二進制數進行存儲。
7 位二進制:0000 0000 ~ 0111 1111 這個范圍的二進制數可以表示 128 個字符,最高位沒有使用
可見字符:英文字母、數字、標點符號
不可見字符:即控制字符,例如,回車符、換行符等
需要記住的字符 ASCII 編碼:
48~57 表示的是數字
65~90 表示的是大寫英文字母
97~122 表示的是小寫英文字母
擴展 ASCII
后 128 個稱為擴展 ASCII 碼,用來表示128 個特殊符號字符、外來語字母和圖形符號,這叫 ASCII 擴展字符集。
1000 0000 ~ 1111 1111 這個范圍的二進制數可以用來表示 128 個字符。
標準 ASCII 和擴展 ASCII 總共可以表示 256 個字符,這些字符都用 1 個字節來表示。
GB2312 編碼
GB2312 字符集采有分區管理的模式,組成 94*94 的方陣,每一行稱為一個“區”,每一列稱為一個“位”,區號位號的范圍均為 01-94,區號和位號組成的代碼稱為“區位碼”,共計有 8836 個碼位。
把每個字符對應的碼位轉換成二進制數,就是 GB2312 編碼。
收集了 7445 個字符,其中漢字 6763 個。
01~09 區收錄了除漢字以外的圖形字符,共計 682 個字符
10~15 區為空白區,沒有使用
16~15 區收錄了 3755 個一級漢字(常用漢字),按拼音排序
56~87 區收錄了 3008 個二級漢字(非常用漢字),按部首/筆畫排序
88~94 區為空白區,沒有使用
01~09 區表示非漢字的圖形字符,共計 682 個字符:
左上角的編號叫“區號”,如上圖的 03 區中的字符“y”的位號是 89,那么這個“y”的碼位就是 0389。
16~55 區收錄了 3755 個一級漢字,按拼音排序:
如上圖所示,漢字“餅”的區位碼 1793。
56~87 區收錄了 3008 個二級漢字,按部首/筆畫排序:
二級漢字都是一些不常用的漢字。
如上圖所示,漢字“侃”的碼位是 5709。
如何存儲“侃”這個漢字?
計算“侃”這個漢字字符的 GB2312 編碼,如下圖所示:
根據上圖所示的計算結果,0xD9A9 就是“侃”這個漢字的 GB2312 編碼,可為什么加上 A0 呢?不知道。
以上可以知道 GB2312 編碼是 2 個字節表示一個字符。
GBK 編碼
在 GB2312 字符集的基礎上擴充,得到 GBK 字符集,對應的編碼叫 GBK 編碼。
GB18030 編碼
在 GBK 字符集的基礎上擴充,增加了很多少數民族的字符,得到 GB18030 字符集,對應的編碼叫 GB18030 編碼
Unicode 編碼
Unicode 的學名是"Universal Multiple-Octet Coded Character Set",通用多八位編碼字符集,簡稱為 UCS。
UCS-2 字符集
Unicode 早期使用 UCS-2 字符集,使用兩個字節表示一個字符,可以表示 65536 個字符。
UCS-4 字符集
因為不足以表示全世界的字符,所以升級成了 UCS-4 字符集,使用 4 個字節來表示一個字符,使用 32 位的二進制數來表示字符,可以表示將近 43 億個字符。
UTF-8 編碼
UTF-8(Unicode Transformation Format)是針對 Unicode 的一種可變長度字符編碼,它不是一種字符集。
UTF-8 將 UCS-4 字符集的碼位劃分成 4 個區間。
0x0000 0000 至 0x0000 007F:0xxxxxxx
0x0000 0080 至 0x0000 07FF:110xxxxx 10xxxxxx
0x0000 0800 至 0x0000 FFFF:1110xxxx 10xxxxxx 10xxxxxx
0x0001 0000 至 0x0010 FFFF:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
漢字“王”在 UCS-4 的碼位(即 Unicode 編碼)是 0x0000738B,轉換成二進制碼就是 00000000 00000000 01110011 10001011。
0x0000738B 屬于 UTF-8 所劃分的第三區間,即三字節模板 1110xxxx 10xxxxxx 10xxxxxx,00000000 00000000 01110011 10001011 從后面往前面逐個替代模板中的 x,得到 11100111 10001110 10001011,再把這個二進制編碼轉換成十六進制編碼得到 0xe78e8b,而這個就是漢字“王”的 UTF-8 編碼了。
總結
以上是生活随笔為你收集整理的字符集和字符编码的学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 联想商务笔记本型号(联想商务本尺寸)
- 下一篇: 缓存和缓冲的区别