查表法字元編碼轉換

2021-04-28 18:54:03 字數 804 閱讀 3804

最近碰到字元編碼轉換的問題,記得2年前在symbian和45度地圖編輯器上曾使用過,但時間一長就都忘記了,最後g了半天才搞定,特此記錄如下,免得以後用到的時候又找不著。。。

常見需要轉換的編碼大致可分為unicode和非unicode編碼,比如:utf16、utf8、gb2312-80、gbk、big5

編碼間相互轉換規律:

utf16與utf8之間可通過演算法直接轉換等到、具體演算法見**。

utf16與非unicode編碼間可通過查表法轉換得到,編碼對映錶可通過unihan.txt檔案提取得到,例如utf16轉換到gb2312-80的對映錶可使用欄位kgb0(注意這裡的kgb0欄位是十進位制的區位碼,在使用時需要轉換為內碼,具體轉換演算法見下一點)unihan.txt檔案還有許多其他的用途,這裡不做多說,若有興趣請參見《unicode漢字資料庫.doc》一文。

區位碼到內碼的轉換,unihan.txt檔案中kgbn系列屬性中給出的區位碼資料是十進位制的,共有四位,其中前兩位代表區碼,後兩位代表位碼。在把它們轉換為實際的gb內碼的時候,應該把區、位碼分開來處理。比如漢字「一」的gb 2312-80區位碼是5027,則它的gb 2312-80內碼計算過程如下:

0x32(50的十六進製制形式,5027/100)+0xa0=0xd2,此即為內碼高位元組的值

0x1b(27的十六進製制形式,5027%100)+0xa0=0xbb,此即為內碼低位元組的值

好了,原理清楚**就沒什麼問題了,我也比較懶,揀了幾個現成的函式,來自網友qiaobin : )

還有就是**中沒有包含兩個字元對映表,實在是太大了,每個6000多行。。需要的還是自己到unihan.txt裡提取吧。

Java 查表法進製轉換

public class formattrans 雙重引用,這樣再呼叫時就不用再填base offset值,只需寫num 待轉化的數 public static void tobin int num public static void tohex int num public static voi...

arctan查表法 查表法

查表法是將一些事先計算好的結果,儲存在常量陣列中,執行時節省計算開銷。例如,計算位元組中位1的個數,int countbits unsigned char dat static char nbittab 256 return nbittab dat 或將位元組按位逆序,unsigned char r...

查表法進行 進製轉換

我就用絕招試試手 1.什麼是查表法 通過容器將對應的關係進行儲存。通過運算得出相應關係中的其中一方的結果,再通過這個結果去容器中找對應的另乙個內容。可以這樣理解 在庫房裡有六個箱子,對每箱子都進行了編號,當我們要找某個箱子時,可以根據對應的編號到庫房裡去找相應的箱子!2.查表法的特點 a 有對應的關...