編碼轉換
...
11.
編碼轉換
1: 編碼集和計算機字元顯示
...
12.
編碼轉換
2:計算機字元顯示
... 2
如同我們所知,計算機採用高低電平分別表示二進位製碼1和
0。為了表示多於兩種的符號,需要採用多位二進位製碼表示乙個符號,由多位二進位制表示的一系列符號的集合,稱為的編碼集。國內最常見的編碼集有
ascii
、gb2312
、gbk
、gb13000
、gb18030
等。ascii (american standard code for information interchange,
美國資訊交換標準碼)。
ascii
是基於拉丁字母的一套編碼系統,等同於國際標準
iso/iec646,用7
位二進位製碼表示乙個字元,從
0x00~0x7f(bin:0000000~1111111)
共定義了
128個字元,其中
0x00~0x1f
和0x7f
表示的33
個字元是控制字元
(非顯示字元
),其他
95個字元
(0x20~0x7e)
是可顯示字元
(包括空格符
0x20)
。在儲存上,一般用
8位表示乙個
ascii
字元,最高位置
0,因此其值等同於
7位表示。
gb2312(gb2312-80,gb0,
資訊交換用漢字編碼字符集
∙基本集)。
gb2312
是中國國家標準總局發布的一套編碼系統,共收錄
7445
個字元,包括
682個全形字符和
6763
個漢字。其所收錄的漢字覆蓋中國大陸
99.75%
的使用頻率。
gb2312
不能處理人名、古漢語方面出現的罕見字元,因此後來出現了
gbk和
gb18030
編碼集。
gb2312
對符號進行區位處理,共分
94區,每區
94位。任意區號和位號確定唯一字元,很明顯,
94*94
共可表示
8836
個字元,除去
7445
已使用的位置,其他留空。
94區中,
01~09
區為特殊符號;
16~55
區位一級漢字,按拼音排序;
56~87
區為二級漢字,按部首、筆畫排序;
10~15
區及88~94
區留空。需要注意的是,區位的初始值都是1,和
c語言中索引從
0開始有差別。在儲存上,
gb2312
採用euc(extended unix code,按照8
位編碼表示字元的方法
)儲存以便相容於
ascii
,其編碼具體方式是:採用兩個位元組儲存乙個漢字,高位元組對應區,低位元組對應位,對區和位索引分別加上
0xa0
便是編碼值,因此
gb2312
的編碼範圍是
0xa1a1~0xf7fe(
不包括0x**7f)
。例如漢字「閆」的區位索引是
0x4326
,分別加上
0xa0
,編碼值是
0xe3c6
;同理,漢字「啊」的區位碼
0x1601
,編碼值是
0xb0a1
。對於加上
0xa0
的原因,是因為以下兩個原因:首先需要繞開控制字元,因此每個字元加
0x20
,其次,需要和
ascii
相容,因此最高位置
1,等於加
0x80(2^7=128=0x80)
;因此每個字元在其區位索引上加
0xa0
。gbk(
漢字內碼擴充套件規範
, k即擴充套件
,英文名
chinese internal code specification)
,wiki
上說,gbk
並非國家標準,是
gb2312
和gb13000
的過度方案,最初由微軟對
gb2312
擴充套件而來,向下相容
gb2312
。雖然gbk
收錄了unicode1.1
和gb13000
中的漢字,但其編碼方式並不相容。至於編碼,仍然採用雙位元組編碼方式,高位元組從
0x81~0xf7
,低位元組值
0x40~0xfe(
不包括0x7f)
,因此gbk
的編碼空間為
24066
。gbk
共收錄了
21886
個字母,空閒
2054
個碼位,全部被對映到
unicode
的pua
區。gb13000(gb-13000.1-93,
資訊科技
-通用多八位編碼字符集
(ucs)
第一部分:體系結構與基本多文種平面
),等同採用
iso/iec 10646.1:1993
。收集漢字
20902
個。很遺憾,我沒找到資料表明該編碼集歷史上曾在何處用到。當前,國家標準是
gb18030
。gb18030(gb19030-2005,
資訊科技
中文編碼字符集
)。最新國家標準,與
gb2312
完全相容,與
gbk基本相容(除去
gbk的
pua對映部分則完全相容
),支援
gb13000
與unicode
的全部統一漢字,共收錄漢字
70244
個。gb18030
採用多位元組編碼,有
一、二、四位元組三種。單位元組值
0x00~0x7f
;雙位元組值高位元組從
0x81~0xfe
,低位元組值
0x40~0xfe(
不包括0x7f)
;四位元組值最高位元組值
0x81~0xfe
,高位元組值
0x30~0x39
,低位元組值
0x81~0xfe
,最低位元組值
0x30~0x39
。編碼空間達到一百六十多萬
(1611668個)
。以上我們所描述編碼集即為內碼。計算機為了顯示字元,必須將內碼對映為字模。字模是字元的位掩碼表示方法。例如
16*16
的矩陣字模,每個字元字模通過
16*16=256bits=32bytes
來表示。如下漢字「國」的矩陣圖:
(插入???????????!!!!!!!太複雜了)
二進位制表示如下:
array[16][16]=;
把任意某種編碼集所表示的全部字元的點陣表示按照規定順序存放,構成點陣字型檔。而字元的顯示過程,則是字模建立的逆過程:字模每位代表顯示器上的乙個畫素點(對於
1024*768
解析度的顯示器,則有
1024*768
個畫素點),按照字模的二維順序投影到顯示器上,則是字元。
計算機字元編碼
因為計算機只能處理數字,如果要處理文字,就必須先把文字轉換為數字才能處理。最早的計算機在設計時採用8個位元 bit 作為乙個位元組 byte 所以,乙個位元組能表示的最大的整數就是255 二進位制11111111 十進位制255 如果要表示更大的整數,就必須用更多的位元組。比如兩個位元組可以表示的最...
計算機字元編碼
編碼方式 計算機中所有的資訊都採用0,1這樣的二進位制位來表示,那麼肯定存在特定的對映規則 例如 0010 0011 我們將這種一一對應的規則稱為編碼 方式 常見的編碼方式有 ascii utf 8 gbk等 編碼 我們希望將hi 這句話儲存在磁碟上,由於計算機只能儲存0和1因此我們可以將hi 按照...
關於計算機字符集編碼
頁是字符集編碼的別名,也有人稱 程式碼頁 早期,頁是ibm稱呼電腦bios本身支援的字符集編碼的名稱。當時通用的作業系統都是命令列介面系統,這些作業系統直接使用bios 的vga功能來顯示字元,作業系統的編碼支援也就依靠bios的編碼。現在這bios 頁被稱為oem 頁。圖形作業系統解決了此問題,圖...