國標與機內碼的轉換
國標碼并不等于區位碼,它是由區位碼稍作轉換得到,其轉換方法為:先將十進制區碼和位碼轉換為十六進制的區碼和位碼,;這樣就得了一個與國標碼有一個相對位置差的代碼,;再將這個代碼的第一個字節和第二個字節分別加上20H,就得到國標碼。如:“保”字的國標碼為3123H,它是經過下面的轉換得到的:1703D->1103H->+20H->3123H。
輸入碼、區位碼、國標碼與機內碼 國家標準局1980年頒布的《信息交換用漢字編碼字符集"基本集》(代號為GB2312 80)規定的漢字交換碼作為國家標準漢字編碼。 GB2312 80中共有7445個字符符號: 漢字符號6763個 一級漢字3755個(按漢語拼音字母順序排列) 二級漢字3008個(按部首筆劃順序排列) 非漢字符號682個 GB2312 80規定,我們知道,鍵盤是當前微機的主要輸入設備,;輸入碼就是使用英文鍵盤輸入漢字時的編碼。目前,我國已推出的輸入碼有數百種,但用戶使用較多的約為十幾種,按輸入碼編碼的主要依據,大體可分為順序碼、音碼、形碼、音形碼四類,如“保”字,用全拼,輸入碼為碼為“BAO”,用區位碼,輸入碼為“1703”,用五筆字型則為“WKS”。
計算機只識別由0、1組成的代碼,ASCII碼是英文信息處理的標準編碼,漢字信息處理也必須有一個統一的標準編碼。 漢字交換碼(國標碼)主要用于漢字信息交換,我國國家標準局于1981年5月頒布了《信息交換用漢字編碼字符集——基本集》,代號為GB2312-80,共對6763個漢字和682個圖形字符進行了編碼,其編碼原則為:漢字用兩個字節表示,每個字節用七位碼(高位為0),;所有的國標碼漢字及符號組成一個94行94列的二維代碼表中。在此方陣中,每一行稱為一個"區",每一列稱為一個"位"。這個方陣實際上組成一個有94個區(編號由01到94),每個區有94個位(編號由01到94)的漢字字符集。每兩個字節分別用兩位十進制編碼,前字節的編碼稱為區碼,后字節的編碼稱為位碼,此即區位碼,其中,高兩位為區號,低兩位為位號。這樣區位碼可以唯一地確定某一漢字或字符;反之,任何一個漢字或符號都對應一個唯一的區位碼,沒有重碼。如“保”字在二維代碼表中處于17區第3位,區位碼即為“1703 ”。
國標碼并不等于區位碼,它是由區位碼稍作轉換得到,其轉換方法為:先將十進制區碼和位碼轉換為十六進制的區碼和位碼,;這樣就得了一個與國標碼有一個相對位置差的代碼,;再將這個代碼的第一個字節和第二個字節分別加上20H,就得到國標碼。如:“保”字的國標碼為3123H,它是經過下面的轉換得到的:1703D->1103H->+20H->3123H。
國標碼是漢字信息交換的標準編碼,但因其前后字節的最高位為0,與ASCII碼發生沖突,如“保”字,國標碼為31H和23H,而西文字符“1”和“#”的SCII也為31H和23H,現假如內存中有兩個字節為31H和23H,;這到底是一個漢字,還是兩個西文字符“1”;和“#”?于是就出現了二義性,顯然,國標碼是不可能在計算機內部直接采用的,于是,;漢字的機內碼采用變形國標碼,其變換方法為:將國標碼的每個字節都加上128,即將兩個字節的最高位由0改1,其余7位不變,如:由上面我們知道,“保”字的國標碼為3123H,前字節為00110001B,后字節為00100011B,高位改1為10110001B和10100011B 即為B1A3H,因此,字的機內碼就是B1A3H;。
顯然,漢字機內碼的每個字節都大于128,這就解決了與西文字符的ASCII碼沖突的問題。
如上所述,漢字輸入碼、區位碼、;國標碼與機內碼都是漢字的編碼形式,它們之間有著千絲萬縷的聯系,但其間的區別也是不容忽視的。