快速业务通道

教你制作GBK与Unicode的对照表 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14

教你制作GBK与Unicode的对照表

时间:2011-10-02

前段时间,在所参与的项目中遇到了一个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码。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号