mysql外码内码定义_Windows | 简体中文编码——输入码(外码)、区位码、国标码(交换码)、机内码(内码)、输出码(字形码)区别及联系...
西文字符在計算機內使用占有1個字節的ASCII碼表示。同樣每個漢字都需要進行編碼,計算機才能處理它們。計算機處理漢字的過程實際上是漢字輸入碼、漢字信息交換碼、漢字機內碼、漢字輸出碼等編碼間的轉換過程。下面對這些編碼做一些介紹,僅僅起拋磚引玉的作用。
一、輸入碼(外碼)
1、輸入碼也叫外碼、輸入法編碼,是用來將漢字輸入到計算機中的一組鍵盤符號,是作為漢字輸入用的編碼。
英文字母只有26個,可以把所有的字符都放到鍵盤上,而使用這種辦法把所有的漢字都放到鍵盤上,是不可能的。所以漢字系統需要有自己的輸入碼體系,使漢字與鍵盤能建立對應關系。
2、目前常用的外碼分為以下幾類:
1)數字編碼,比如區位碼;
2)拼音編碼,比如全拼、雙拼、自然碼等;
3)字形編碼,比如五筆、表形碼、鄭碼等。
二、區位碼
整個GB2312字符集分成94個區,每區有94個位,每個區位上只有一個字符,即每區含有94個漢字或符號,用所在的區和位來對字符進行編碼(實際上就是字符編號、碼點編號),因此稱為區位碼。
換言之,GB2312將包括漢字在內的所有字符編入一個94 * 94的二維表,行就是“區”、列就是“位”,每個字符由區、位唯一定位,其對應的區、位編號合并就是區位碼。比如“中”字在54區48位,所以“中”字的區位碼是:5448
注意,GB類漢字編碼為雙字節編碼,因此,45相當于高位字節,82相當于低位字節
三、國標碼(交換碼)
雖然GB2312為中文編碼,我們也要使用到英文字母等字符,況且當時ASCII已經通用,所以要使GB2312能夠兼容ASCII才行。為了兼容,GB2312在設計時避開了ASCII字符中的不可顯示字符0000 0000 ~ 0001 1111(十六進制為0 ~ 1F,十進制為0 ~ 31)及空格字符0010 0000(十六進制為20,十進制為32)(為什么只避開ASCII中0~32的不可顯示字符和空格字符,不避開其他字符呢?后面解釋),國標碼(又稱為交換碼)規定表示漢字的范圍為(0010 0001,0010 0001) ~(0111 1110,0111 1110),十六進制為(21,21) ~ (7E,7E),十進制為(33,33) ~ (126,126)。
因此,必須將“區碼”和“位碼”分別加上20H(注意,一定是分別加上,因為區碼和位碼分別代表一個字節,H為十六進制數的后綴:Hexadecimal,20H代表十進制中的32),作為國標碼。也就是說,國標碼相當于將區位碼向后偏移了32,以避免與ASCII字符中0~32的不可顯示字符和空格字符相沖突。例如“中”字的區位碼為5448,轉為國標碼的過程為,區碼:(54+32)=86,位碼:(48+32)=80,所以“中”字的國標碼表示為:(86, 80)。十六進制為(56H, 50H)。
四、機內碼(內碼)
國標碼還不能直接在計算機上使用,因為這樣還是會和ASCII中的除控制字符外的其他字符沖突(沖突的結果就是導致亂碼)。
拿“中”字舉個例子,它的國標碼中的高位字節為86,這會與ASCII中大寫字母'V'沖突,低位字節為80,與'P'沖突。因此為避免這種情況,規定國標碼中的每個字節的最高位都從0換成1,即相當于每個字節都再加上128(十六進制為80,即80H;二進制為1000 0000),從而得到國標碼的“機內碼”表示,簡稱“內碼”。由于ASCII碼只用了一個字節中的低7位,利用這個特性,這個首位(最高位)上的“1”就可以作為識別漢字編碼的標志,計算機在處理到首位是“1”的編碼時就把它理解為漢字,在處理到首位是“0”的編碼時就把它理解為ASCII字符。
“中”字從國標碼轉換為機內碼的過程為,高位字節:(86+128)=214,低位字節:(80+128)=208,所以“中”字的內碼十進制表示為:(214,208),十六進制表示為:(D6, D0)。
此時已經不再與ASCII沖突,完全兼容ASCII。因此,內碼才是字符用GB2312編碼后的在計算機中存儲的形式。
五、輸出碼(字形碼)
1、輸出碼,又稱為字型碼、字模碼、字形碼,屬于點陣代碼的一種。
為了將漢字在顯示器或打印機上輸出,把漢字按圖形符號設計成點陣圖,就得到了相應的點陣代碼(字形碼)。也就是用0、1表示漢字的字形,將漢字放入n行*n列的正方形(點陣)內,該正方形共有n^2個小方格,每個小方格用一位二進制表示,凡是筆劃經過的方格值為1,未經過的值為0。
2、顯示一個漢字一般采用16×16點陣或24×24點陣或48×48點陣。已知漢字點陣的大小,可以計算出存儲一個漢字所需占用的字節空間。
比如,用16×16點陣表示一個漢字,就是將每個漢字用16行,每行16個點表示,一個點需要1位二進制代碼,16個點需用16位二進制代碼(即2個字節),共16行,所以需要16行×2字節/行=32字節,即16×16點陣表示一個漢字,字形碼需用32字節。
因此,字節數=點陣行數×(點陣列數/8)。
3、為了將漢字的字形顯示輸出或打印輸出,漢字信息處理系統還需要配有漢字字形庫,也稱字模庫,簡稱字庫,它集中了漢字的字形信息。
字庫按輸出方式可分為顯示字庫和打印字庫。用于顯示輸出的字庫叫顯示字庫,工作時需調入內存。用于打印輸出的字庫叫打印字庫,工作時無需調入內存。
字庫按存儲方式也可分為軟字庫和硬字庫。軟字庫以文件的形式存放在硬盤上,現多用這種方式。硬字庫則將字庫固化在一個單獨的存儲芯片中,再和其它必要的器件組成接口卡,插接在計算機上,通常稱為漢卡,這種方式現已淘汰。
六、小結
可以這樣理解,為了在計算機內表示漢字而采取統一的編碼方式所形成的漢字編碼叫內碼。為方便漢字輸入而形成的漢字編碼為外碼,也叫輸入碼。為顯示輸出和打印輸出漢字而形成的漢字編碼為字形碼,也稱為字模碼、輸出碼。
計算機通過鍵盤輸入的外碼(重碼時還需附加選擇編號)對應于漢字內碼,將漢字外碼轉換(即映射)為漢字內碼,以實現輸入漢字的目的;通過漢字內碼在字模庫(即字庫)中找出漢字的字形碼,將漢字內碼轉換(即映射)為漢字字形碼,以實現顯示輸出和打印輸出漢字的目的。
事實上,英文字符的輸入、處理和顯示過程大致上也差不多,只不過英文字符不需要輸入碼(即外碼),直接在鍵盤上輸入對應的英文字母即可。
七、實際操作驗證
1、首先下載軟件“GBCCovert.exe”,打開軟件輸入“國”字,然后按“轉換”,就會得到區位碼十進制數2590(切記選擇十進制的數),我們就通過計算,看看是否真實所得的機內碼十六進制數B9FA,并在word文檔中加以驗證,如下圖所示。
2、區位碼+2020H=國標碼
由上得到區位碼的十進制數為2590,GB類漢字編碼為雙字節編碼,因此,,25相當于高位字節,90相當于低位字節。分別轉換為十六進制為:
25→19H,90→5AH
?
19 5A+20 20=397AH
3、國標碼+8080H=機內碼
39 7A+80 80=B9FAH
所得結果,與漢字內碼查看器里面的結果一致,不過先別高興,到word文檔里面再驗證以下。
4、打開word,選擇“插入→符號→其他符號”,在字符代碼中輸入“B9FA”,具體如下圖所示。
綜上,從區位碼計算機內碼的實際操作驗證完成。快快試試吧!!!
管理員設置回復可下載
總結
以上是生活随笔為你收集整理的mysql外码内码定义_Windows | 简体中文编码——输入码(外码)、区位码、国标码(交换码)、机内码(内码)、输出码(字形码)区别及联系...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 58失去“神奇”魔法
- 下一篇: 怎样做中国的自由译者