漢字一級字型檔與二級字型檔

來源:互聯網
上載者:User

最近在項目中碰到利用java預設的Collator.getInstance(Locale.China)進行預設的拼音排序時有一部分漢字無法正確的通過預設的排序方式自動進行排序。查詢了一下資料,原來問題出現在中文字型檔上面,預設的一級字型檔是採用的拼音排序方式,而二級字型檔中的漢字預設卻是採用的部首筆劃的順序排列的。在此將網路上關於漢字的一級字型檔和二級字型檔資訊的資料做一個小小的總結。

為了使每一個漢字有一個全國統一的代碼,1980年,我國頒布了第一個漢字編碼的國家標準: GB2312-80《資訊交換用漢字編碼字元集》基本集,這個字元集是我國中文資訊處理技術的發展基礎,也是目前國內所有漢字系統的統一標準。由於國標碼是四位十六進位,為了便於交流,大家常用的是四位十進位的區位碼。所有的國標漢字與符號組成一個94×94的矩陣。在此方陣中,每一行稱為一個"區",每一列稱為一個"位",因此,這個方陣實際上組成了一個有94個區(區號分別為0
1到94)、每個區內有94個位(位號分別為01到94)的漢字字元集。一個漢字所在的區號和位號簡單地組合在一起就構成了該漢字的"區位碼"。在漢字的區位碼中,高兩位為區號,低兩位為位號。 在區位碼中,01-09區為682個特殊字元,16~87區為漢字區,包含6763個漢字 。其中16-55區為一級漢字(3755個最常用的漢字,按拼音字母的次序排列),56-87區為二級漢字(3008個漢字,按部首次序排列)。


漢字的內碼用兩個位元組。每個位元組都是從160十進位(A0十六進位,10100000二進位)開始,也就是兩個高位位1表示是內碼。高位元組對應區位碼中的區碼,低位元組對應區位碼中的位碼。 
由於低位元組從10100000開始,這樣一個區就只能表示95個字,又由於區位碼中的位碼是從1開始的,這樣內碼低位元組表示位碼是從10100001(161)開始,就只能表示94個字,這正對應區位碼中的每區94個漢字。 

一個漢字內碼與區位碼的關係是: 
十進位 
內碼高位元組=區碼+160 內碼低位元組=位碼+160 
十六進位 
內碼高位元組=區碼+A0 內碼低位元組=位碼+A0 
由於漢字的區碼是從16開始的,16+160=176,這樣漢字的內碼的高位元組就是從176開始的,得到一個規律: 

因此要判斷一個字元是否是漢字的方法(對於Unicode字元,因為它是用兩個位元組表示一個字元,也是現在編程較常用的表示和存放字元的方法): 
讀出字元的高位元組,將其轉換位十進位,然後判斷其是否大於等於(>=)176,如果是就表示它是漢字。 
如果為了可靠,可以在判斷完高位元組後,再讀出低位元組,將其轉換位十進位,然後判斷其是否大於(>)160,如果是就表示它是漢字。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.