程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 教你制作GBK與Unicode的對照表

教你制作GBK與Unicode的對照表

編輯:關於JAVA

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved