制作GBK与Unicode的对照表

    前段时间,在所参与的项目中遇到了一个unicodegb之间转码失败的问题,一些不常用汉字的编码都被转成了“??”,这些汉字没有显示出来,于是自己对相关的问题做了一些研究并最终使问题得以解决。现在就结合前面两篇的unicodeGB方面的基本原理,介绍这种制作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_endianlittle_endian有关的,这里不多说。

    当每一次内层循环结束时,buffer字符串中前两个数字就是一个GB码,后面两个数字就是一个unicode码,把它写到文件中就行了。

这样的文件得到之后,再在另外的程序中载入文件,把Unicode值装入数组,以GB码为索引,就可以很方便地由GB码查得Unicode码。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值