国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

教你制作GBK與Unicode的對照表

2024-07-21 02:14:31
字體:
來源:轉載
供稿:網友

  前段時間,在所參與的項目中遇到了一個unicode與gb之間轉碼失敗的問題,一些不常用漢字的編碼都被轉成了“??”,這些漢字沒有顯示出來,于是自己對相關的問題做了一些研究并最終使問題得以解決。現在就結合前面兩篇的unicode與gb方面的基本原理,介紹這種制作gbk-unicode編碼對照表的方法。

  java的字符串string類功能強大,不但能進行一些基本的字符串操作,還可以根據需要構造指定字符集的字符串,本文所介紹的方法正是利了這一點,這種方法的基本思路是:

  1、遍歷gbk編碼表中的所有漢字,使用該字的gb編碼構造一個字符串。gbk編碼表中各部分的漢字分塊比較整齊,很容易遍歷。

  2、使用getbytes()方法取得該字符的字節數組,由于java是用unicode來表示字符的,所以此漢字的unicode就在其中。

  以下是一段示例代碼:

{
    int count = 0;
    for(int segindex=0xb0; segindex<=0xf7; segindex++) {
        for(int charindex=0xa1; charindex<=0xfe; charindex++) {
            byte [] gbkbytes = new byte[] {(byte)(segindex), (byte)charindex};
            byte [] unicodebytes;
            string str = new string(gbkbytes,"gbk");
                
            unicodebytes = str.getbytes("unicode");
            if(unicodebytes.length == 4) {
                count++;
                string buffer = "";
                for (int i=0;i<gbkbytes.length;i++)
                    buffer += (int)(0x00ff&gbkbytes[i]) + " ";
                for (int i=3;i>1;i--)
                    buffer += (int)(0x00ff&unicodebytes[i]) + " ";
                buffer += " ";
                osw.write(buffer);
            }
        }
    }
}

   這一段是對gbk/2區的漢字進行遍歷并處理的代碼,gbk/2區的首字節范圍在[0xb0,0xf7],尾字節范圍在[0xa1,0xfe],在構造字符串時使用的字符集為gbk:

string str = new string(gbkbytes,"gbk");

  在使用getbytes()取得的字節數組中會有四個元素,前兩個不知是做什么用的,可能與字符串本身的結構有關,接下來的兩個字節才是真正的unicode碼。但這兩個字節是倒序的,要從最后一個字節開始取,之所以這樣是與big_endian和little_endian有關的,這里不多說。

  當每一次內層循環結束時,buffer字符串中前兩個數字就是一個gb碼,后面兩個數字就是一個unicode碼,把它寫到文件中就行了。

  這樣的文件得到之后,再在另外的程序中載入文件,把unicode值裝入數組,以gb碼為索引,就可以很方便地由gb碼查得unicode碼。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 于都县| 娄烦县| 九龙城区| 永善县| 永胜县| 博野县| 西吉县| 轮台县| 油尖旺区| 永修县| 攀枝花市| 平顶山市| 墨玉县| 浮山县| 开江县| 安康市| 菏泽市| 黑河市| 资源县| 长宁区| 阿勒泰市| 古浪县| 兴安县| 濮阳县| 明星| 高密市| 伊宁县| 新乡市| 安溪县| 陕西省| 儋州市| 托克托县| 新平| 禹州市| 保亭| 昭苏县| 迭部县| 达日县| 夏河县| 竹北市| 德格县|