教你製作GBK與Unicode的對照表

來源:互聯網
上載者:User

  前段時間,在所參與的項目中遇到了一個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碼。



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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