机外码、区位码、国标码、机内码
機外碼
??機外碼又稱輸入碼。鍵盤是當前微機的主要輸入設備,輸入碼就是使用英文鍵盤輸入漢字時的編碼。目前,我國已推出的輸入碼有數百種,但用戶使用較多的約為十幾種,按輸入碼編碼的主要依據,大體可分為順序碼、音碼、形碼、音形碼四類,如“保”字,用全拼,輸入碼為“BAO”,用區位碼,輸入碼為“1703 ”,用五筆字型則為“WKS”。
區位碼
??區位碼也是機外碼的一種。我國國家標準局于1981年5月頒布了《信息交換用漢字編碼字符集——基本集》,代號為GB2312-80,共對6763個漢字和682個圖形字符進行了編碼,其編碼原則為:漢字用兩個字節表示,每個字節用七位碼(高位為0),;國家標準將漢字和圖形符號排列在一個94行94列的二維代碼表中,;每兩個字節分別用兩位十進制編碼,前字節的編碼稱為區碼,后字節的編碼稱為位碼,此即區位碼,如“保”字在二維代碼表中處于17區第3位,區位碼即為“1703 ”。
國標碼
??國標碼并不等于區位碼,它是由區位碼稍作轉換得到,其轉換方法為:先將十進制區碼和位碼轉換為十六進制的區碼和位碼,再將這個代碼的第一個字節和第二個字節分別加上20H,這樣就得了一個與區位碼有一個相對位置差的代碼,也就是國標碼。
機內碼
??漢字機內碼,又稱“漢字ASCII碼”,簡稱“內碼”,指計算機內部存儲,處理加工和傳輸漢字時所用的由0和1符號組成的代碼。輸入碼被接受后就由漢字操作系統的“輸入碼轉換模塊”轉換為機內碼,與所采用的鍵盤輸入法無關。機內碼是漢字最基本的編碼,不管是什么漢字系統和漢字輸入方法,輸入的漢字外碼到機器內部都要轉換成機內碼,才能被存儲和進行各種處理。
區位碼、國標碼、機內碼的關系
- 漢字國標碼 = 由區位碼轉換后的碼(區號位號10進制分別轉換為16進制) + 2020H
- 漢字機內碼 = 漢字國標碼 + 8080H
例如:“中”
區位碼:5448(區號位號都為10進制) → 3630H
國標碼:5650H = 3630H + 2020H
機內碼:D6D0H = 5650H + 8080H
2020H、8080H
??區位碼、內碼、國標碼怎么轉換非常簡單,但是令人迷惑的是為什么要那么轉換?這種轉換不可能平白無故地那樣轉換!
?? 首先,注意到一點,GB2312雖說是對中文編碼,但是里面有對26個英文字母和一些特殊符號的編碼,按理說這和ASCII重合的部分應該無需設置,沿用ASCII中不就行了?但是當時在制定GB2312之前,就決定覆蓋掉ASCII中符號和英文字母部分,所以將其中的英文字母和符號重新編入GB2312中。而對于ASCII中前32個控制字符則繼續沿用。所以保留前32字符,就需要將漢字編碼向后偏移32,十六進制20H,這也就是區位碼要加上20H得到國標碼,這就是GB2312的編碼規范。
?? 而這樣產生一個弊端,某些早期用ASCII碼編碼的英文文章無法打開,一打開就是亂碼。比如:如“保”字,國標碼為31H和23H,而西文字符“1”和“#”的ASCII也為31H和23H,現假如內存中有兩個字節為31H和23H,這到底是一個漢字?還是兩個西文字符“1”和“#”于是就出現了二義性,顯然,國標碼是不可能在計算機內部直接采用的,也就是說應該要兼容早期ASCII碼而不是覆蓋它!為了解決這個問題,將字節的最高位設為1,因為ASCII中使用7位,最高位為0。這樣就區分開了ASCII和GB2312。這也是為什么要加上8080H。
??其實我們說國標碼才是GB2312的規范編碼,后來的內碼是微軟為了解決沖突問題而采用的方式,本質上是修改了GB2312的編碼標準,而這種方法最后產生的編碼最后就被一些教科書稱為內碼。
【參考博客】
https://blog.csdn.net/zrf2112/article/details/50718684
總結
以上是生活随笔為你收集整理的机外码、区位码、国标码、机内码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态规划套路详解
- 下一篇: VMware vSphere 6.7 U