首 页中国梦想方达科技Loveshine'Blog绿区文章绿区下载绿区图像客户留言绿区论坛繁體中文
设为首页
加入收藏
联系我们
您当前的位置:绿色生活社区 -> 网站设计 -> Script -> 文章内容 退出登录 用户管理
栏目导航
· Css/Html · Script
· 免费资源 · 网站优化
· Dreamweaver · 平面设计
· 网页素材 · 图像处理
热门文章
· [组图] 网页导航条素..
· QQ空间相册密码破解..
· 【推荐收藏】【MSDN..
· WIN2003产品密钥
· 越狱全集高速下载
· 新东方在线 4+1 网络..
· 空间代码----最新去..
· 用于格式化后硬盘数..
· 新东方在线 4+1 网络..
· 新东方在线 4+1 网络..
相关文章
· 教你巧用注册表找回..
· 教你修炼Windows运行..
· 教你如何批量解析CN..
· [图文] 教你使用Core..
· 教你如何下载新浪视..
· 教你使用netstat命令..
· [图文] 教你用Photos..
· [图文] 手把手教你建..
· [图文] 手把手教你在..
教你制作GBK与Unicode的对照表
作者:不详  来源:不详  发布时间:2007-4-12 10:10:46  发布人:loveshine

减小字体 增大字体

前段时间,在所参与的项目中遇到了一个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码。
[] [返回上一页] [打 印] [收 藏]
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论…]
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 绿区社区
Copyright © 2002-2006 1Lives.Com. All Rights Reserved .
冀ICP备06009849号