本文实现将GB2312编码转换成汉字,并简单了解一下GB2312编码。GB2312是信息交换汉字编码字符集,适用于汉字处理、汉字通信等系统之间的信息交换,通行于中国大陆。使用区位码表示方式,对所收汉字进行了“分区”处理,每区含有94个汉字/符号。
- 01-09区为特殊符号。
- 16-55区为一级汉字,按拼音排序。
- 56-87区为二级汉字,按部首/笔画排序。
- 10-15区及88-94区则未有编码。
注:
- “啊”字是GB2312之中的第一个汉字,它的区位码就是1601。
- 每个汉字及符号以两个字节来表示。
将GB2312编码转化为汉字方法:
public void App() throws Exception{
String string = "CCB8B9FAC6BD";
String result = stringToGbk(string);
System.out.println(result);
}
// 将gbk编码转换成汉字
public String stringToGbk(String string) throws Exception{
byte[] bytes = new byte[string.length() / 2];
for(int i = 0; i < bytes.length; i ++){
byte high = Byte.parseByte(string.substring(i * 2, i * 2 + 1), 16);
byte low = Byte.parseByte(string.substring(i * 2 + 1, i * 2 + 2), 16);
bytes[i] = (byte) (high << 4 | low);
}
String result = new String(bytes, "gbk");
return result;
}
第一个字节称为“高位字节”(也称“区字节)”,第二个字节称为“低位字节”(也称“位字节”)。“高位字节”使用了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)