PHP漢字轉換爲拼音字頭原理

轉載地址 http://www.php100.com/html/itnews/it/2013/0418/13372.html


 

GB 2312中對所收漢字進行了“分區”處理,每區含有94個漢字/符號。這種表示方式也稱爲區位碼。
   1)01-09區爲特殊符號。
   2)16-55區爲一級漢字,按拼音排序。 
   3)56-87區爲二級漢字,按部首/筆畫排序。
   4)10-15區及88-94區則未有編碼。
   在使用GB2312的程序中,通常採用EUC儲存方法,以便兼容於ASCII。瀏覽器編碼表上的“GB2312”,通常都是指“EUC-CN”表示法。
   每個漢字及符號以兩個字節來表示。第一個字節稱爲“高位字節”(也稱“區字節)”,第二個字節稱爲“低位字節”(也稱“位字節”)。
   “高位字節”使用了0xA1-0xF7(把01-87區的區號加上0xA0),“低位字節”使用了0xA1-0xFE(把01-94加上 0xA0)。由於一級漢字從16區起始,漢字區的“高位字節”的範圍是0xB0-0xF7,“低位字節”的範圍是0xA1-0xFE,佔用的碼位是 72*94=6768。其中有5個空位是D7FA-D7FE。
   例如“啊”字在大多數程序中,會以兩個字節,0xB0(第一個字節) 0xA1(第二個字節)儲存。區位碼=區字節+位字節(與區位碼對比:0xB0=0xA0+16,0xA1=0xA0+1)。
   設計:
      用一個數組存放國標一級漢字不同讀音的起始區位碼 :如
     static final int[] secPosValueList = {   
         1601, 1637, 1833, 2078, 2274, 2302, 2433, 2594, 2787, 3106, 3212, 3472,   
         3635, 3722, 3730, 3858, 4027, 4086, 4390, 4558, 4684, 4925, 5249, 9999};   
   一個數據存放存放國標一級漢字不同讀音的起始區位碼對應讀音 
   static final char[] firstLetter = {   
         'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'o', 'p',   
         'q', 'r', 's', 't', 'w', 'x', 'y', 'z'};   
   處理方法:
   1. 判斷是否爲英文之母
   2. 如果是,直接返回英文之母
   3. 取字符的編碼值
   4. 比較判斷其編碼值在碼錶中的位置。
5. 根據位置值,返回之母表中相應值

 

GB 2312中對所收漢字進行了“分區”處理,每區含有94個漢字/符號。這種表示方式也稱爲區位碼。
   1)01-09區爲特殊符號。
   2)16-55區爲一級漢字,按拼音排序。 
   3)56-87區爲二級漢字,按部首/筆畫排序。
   4)10-15區及88-94區則未有編碼。
   在使用GB2312的程序中,通常採用EUC儲存方法,以便兼容於ASCII。瀏覽器編碼表上的“GB2312”,通常都是指“EUC-CN”表示法。
   每個漢字及符號以兩個字節來表示。第一個字節稱爲“高位字節”(也稱“區字節)”,第二個字節稱爲“低位字節”(也稱“位字節”)。
   “高位字節”使用了0xA1-0xF7(把01-87區的區號加上0xA0),“低位字節”使用了0xA1-0xFE(把01-94加上 0xA0)。由於一級漢字從16區起始,漢字區的“高位字節”的範圍是0xB0-0xF7,“低位字節”的範圍是0xA1-0xFE,佔用的碼位是 72*94=6768。其中有5個空位是D7FA-D7FE。
   例如“啊”字在大多數程序中,會以兩個字節,0xB0(第一個字節) 0xA1(第二個字節)儲存。區位碼=區字節+位字節(與區位碼對比:0xB0=0xA0+16,0xA1=0xA0+1)。
   設計:
      用一個數組存放國標一級漢字不同讀音的起始區位碼 :如
     static final int[] secPosValueList = {   
         1601, 1637, 1833, 2078, 2274, 2302, 2433, 2594, 2787, 3106, 3212, 3472,   
         3635, 3722, 3730, 3858, 4027, 4086, 4390, 4558, 4684, 4925, 5249, 9999};   
   一個數據存放存放國標一級漢字不同讀音的起始區位碼對應讀音 
   static final char[] firstLetter = {   
         'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'o', 'p',   
         'q', 'r', 's', 't', 'w', 'x', 'y', 'z'};   
   處理方法:
   1. 判斷是否爲英文之母
   2. 如果是,直接返回英文之母
   3. 取字符的編碼值
   4. 比較判斷其編碼值在碼錶中的位置。
5. 根據位置值,返回之母表中相應值
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章