1. 程式人生 > >ASCII碼和漢字碼

ASCII碼和漢字碼

   國家標準漢字字符集GB2312-80共收集了共7445個漢字和圖形符號,其中漢字6763個,分為二級,一級漢字3755個,二級漢字3008個。漢字圖形符號根據其位置將其分為94個“區”,每個區包含94個漢字字元,每個漢字字元又稱為一個“位”。區的序號和位的序號都是從01到94。        UCDOS軟體中的檔案HZK16和檔案ASC16分別為16×16的國標漢字點陣檔案和8×16的ASCII碼點陣檔案,以二進位制格式儲存。在檔案HZK16中,按漢字區位碼從小到大依次存有國標區位碼錶中的所有漢字,每個漢字佔用32個位元組,每個區為94個漢字。在檔案ASC16中按ASCII碼從小到大依次存有8×16的ASCII碼點陣,每個ASCII碼佔用16個位元組。       在PC機的文字檔案中,漢字是以機內碼的形式儲存的,每個漢字佔用兩個位元組:第一個位元組為區碼
為了與ASCII碼區別,範圍從十六進位制的0A1H開始(小於80H的為ASCII碼字元),對應區位碼中區碼的第一區;第二個位元組為位碼,範圍也是從0A1H開始,對應某區中的第一個位碼。這樣,將漢字機內碼減去0A0A0H就得該漢字的區位碼。        例如漢字“房”的機內碼為十六進位制的“B7BF”,其中“B7”表示區碼,“BF”表示位碼。所以“房”的區位碼為0B7BFH-0A0A0H=171FH。將區碼和位碼分別轉換為十進位制得漢字“房”的區位碼為“2331”,即“房”的點陣位於第23區的第31個字的位置,相當於在檔案HZK16中的位置為第32×[(23-1) ×94+(31-1)]=67136B以後的32個位元組為“房”的顯示點陣。
       ASCII碼的顯示與漢字的顯示原理相同,在ASC16檔案中不存在機內碼的問題,其顯示點陣直接按ASCII碼從小到大依次排列,不過每個ASCII碼在文字中只佔1個位元組並且小於80h,每個ASCII碼為8X16點陣,即在ASCII16檔案中,每個ASCII碼的點陣也只佔16個位元組。
 
背景資料:
       1980年,我國頒佈了第一個漢字編碼的國家標準: GB2312-80《資訊交換用漢字編碼字符集》基本集,這個字符集是我國中文資訊處理技術的發展基礎,也是目前國內所有漢字系統的統一標準。由於國標碼是四位十六進位制,為了便於交流,大家常用的是四位十進位制的區位碼。所有的國標漢字與符號組成一個94×94的矩陣。在此方陣中,每一行稱為一個"區",每一列稱為一個"位",因此,這個方陣實際上組成了一個有94個區(區號分別為0 1到94)、每個區內有94個位(位號分別為01到94)的漢字字符集。一個漢字所在的區號和位號簡單地組合在一起就構成了該漢字的"區位碼"。在漢字的區位碼中,高兩位為區號,低兩位為位號。在區位碼中,01-09區為682個特殊字元,16~87區為漢字區,包含6763個漢字。其中16-55區為一級漢字(3755個最常用的漢字,按拼音字母的次序排列),56-87區為二級漢字(3008個漢字,按部首次序排列)。所以,當我們需要n個任意漢字時,我們不必建一個全部漢字表,而是利用區位碼實現常用漢字的提取。

機內碼     
國標碼:是指我國1981年公佈的“中華人民共和國國家標準資訊交換漢字編碼”,代號為“GB2312-80”。由連續的兩個位元組組成。

2.機內碼:在計算機內表示漢字的程式碼是漢字機內碼漢字機內碼國標碼演化而來,把表示國標碼的兩個位元組的最高位分別加“1”,就變成漢字機內碼

3.輸入碼:漢字輸入碼是指直接從鍵盤輸入的各種漢字輸入方法的編碼,屬於外碼。

4.字型點陣碼:用點陣方式來構造漢字字型,然後儲存在計算機內,構成漢字字模庫。目的是為了能顯示和列印漢字。

(1)區位碼先轉換成十六進位制數表示
(2)(區位碼十六進位制表示)+2020H=國標碼;
(3)國標碼+8080H=機內碼

漢字的機內碼是指在計算機中表示一個漢字的編碼。機內碼與
區位碼
稍有區別。漢字區位碼的區碼和位碼的取值均在1~94之間,如直接用區位碼作為機內碼,就會與基本ASCII碼混淆。為了避免機內碼與基本ASCII碼的衝突,需要避開基本ASCII碼中的控制碼(00H~1FH),還需與基本ASCII碼中的字元相區別。為了實現這兩點,可以先在區碼和位碼分別加上20H,在此基礎上再加80H(此處“H”表示前兩位數字為十六進位制數)。經過這些處理,用機內碼錶示一個漢字需要佔兩個位元組,分別  稱為高位位元組和低位位元組,這兩位位元組的機內碼按如下規則表示:
    高位位元組=區碼+20H+80H(或區碼+A0H)
    低位位元組=位碼+20H+80H(或位碼+AOH)
    由於漢字的區碼與位碼的取值範圍的十六進位制數均為01H~5EH(即十進位制的01~94),所以漢字的高位位元組與低位位元組的取值範圍則為A1H~FEH(即十進位制的161~254)。
    例如,漢字“啊”的區位碼為1601,區碼和位碼分別用十六進位制表示即為1001H,它的機內碼的高位位元組為B0H,低位位元組為A1H,機內碼就是B0A1H。

2603 =     1A03H     區位碼

                + A0A0H

    =             BAA3H     機內碼

漢字的編碼知識
資訊編碼各國有各國不同的編碼,國際上統一使用的編碼為ASCII(美國標準資訊交換程式碼),我國使用的有國標碼BG(中文),和BIG5(中文繁體)兩種。

附帶要知道:中文字型檔(字型檔檔名,大小,副檔名,存放位置)
            中文輸入方法(語音輸入,鍵盤輸入,手寫輸入,掃描輸入等)

1.漢字的編碼

(1)國標碼:是指我國1980年公佈的“資訊交換漢字編碼字符集”,代號為“GB2312-80”。由連續的兩個位元組組成。

(2)機內碼:在計算機內表示漢字的程式碼是漢字機內碼,漢字機內碼由國標碼演化而來,把表示國標碼的兩個位元組的最高位分別加“1”,就變成漢字機內碼。

(3)輸入碼:漢字輸入碼是指直接從鍵盤輸入的各種漢字輸入方法的編碼,屬於外碼。

(4)字型點陣碼:用點陣方式來構造漢字字型,然後儲存在計算機內,構成漢字字模庫。目的是為了能顯示和列印漢字。

編碼的轉換舉例
  漢字 區位碼 16進位制  國標碼  機內碼
  文  4636  2E24H  4E44H   CEC4H

“文”的區位碼為4636,區碼和位碼分別用16進製表示即為“2E24H”, 0010 1110 0010 0100轉換成國標碼“4E44H”,0100 1110 0100 0100機內碼為“CEC4H”, 1100 1110 1100 0100

2.漢字的輸入方法

漢字輸入方法目前有兩大類四種。

(1)鍵盤輸入法。這是最常用的,利用各種漢字輸入方法的編碼敲擊鍵盤來輸入漢字;

(2)非鍵盤輸入法。目前主要有三種方法。 

手寫筆輸入法:利用漢字識別技術,通過書寫筆在感應板上書寫漢字把其輸入的方法。

語音輸入法:利用語音識別技術,通過口說來輸入漢字。

掃描識別輸入,是將印或寫在紙上的漢字通過掃描儀輸入計算機,再經相應軟體處理後轉換成漢字機內碼。

3.漢字字符集的概念

有兩種漢字字符集

(1)國標碼字符集GB2312-80:該字符集收錄了6763個常用漢字,其中一級漢字3755個,二級漢字3008個。另外還收錄了各種符號682個,合計7445個。

(2)GBK漢字集:GBK即漢字擴充內碼規範,又稱大字符集,一共收錄了20900個漢字。在Windows簡體中文版中,又增加了101個補充字,一共有21001個字。它包容了GB2312-80的6763個常用漢字,臺灣BIG5碼收錄了13000多個漢字,是目前見到的收錄漢字最多的漢字系統