`
lukew
  • 浏览: 51629 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

GB2312转换Unicode

阅读更多
之前的文章介绍了在j2me环境下GB2312转换为UTF-8的方法。
后来继续对编码及char类型进行学习,发现一些有趣的问题。
首先java环境下的char类型变量,实际上就是以unicode方式存储的。
所以以下方法有效:

输入unicode编码的byte数组,即可两两拼接成一个char。
而String类型实际上就是在char数组的基础上衍生出来的。大家可以参考cldc的源代码。
<!---->public static String read_Uni(byte[] word_unicode) {
        StringBuffer stringbuffer 
= new StringBuffer("");
        
for (int j = 0; j < word_unicode.length;) {
            
int l = word_unicode[j++];
            
int h = word_unicode[j++];
            
char c = (char) ((l & 0xff| ((h << 8& 0xff00));
            stringbuffer.append(c);
        }
        
return stringbuffer.toString();
    }


j2me环境下也是如此。
所以在第一次给出的转换类中,提供的gb2312到utf-8直接转换的快速方法。现在看来是画蛇添足了。

根据以上经验,更新转换类如下:
<!---->public class HGB2312 {
 
        
private byte[] map = new byte[15228];
 
        
public HGB2312() throws Exception {
            InputStream is 
= getClass().getResourceAsStream("/gb2u.dat");
            is.read(map);
            is.close();
        }
 
        
public String gb2utf8(byte[] gb) {
            StringBuffer sb 
= new StringBuffer();
            
int c, h, l, ind;
            
for (int i = 0; i < gb.length;) {
                
if (gb[i] >= 0) {
                    sb.append((
char) gb[i++]);
                } 
else {
                    h 
= 256 + gb[i++];
                    l 
= 256 + gb[i++];
                    h 
= h - 0xA0 - 1;
                    l 
= l - 0xA0 - 1;
                    
if (h < 9) {
                        ind 
= (h * 94 + l) << 1;
                        c 
= (byte2Int(map[ind]) << 8 | byte2Int(map[ind + 1]));
                        sb.append((
char) c);
                    } 
else if (h >= 9 && h <= 14) {
                        sb.append((
char0);
                    } 
else if (h > 14) {
                        h 
-= 6;
                        ind 
= (h * 94 + l) << 1;
                        c 
= (byte2Int(map[ind]) << 8 | byte2Int(map[ind + 1]));
                        sb.append((
char) c);
 
                    } 
else {
                        sb.append((
char0);
                    }
                }
            }
            
return sb.toString();
        }
 
        
private int byte2Int(byte b) {
            
if (b < 0) {
                
return 256 + b;
            } 
else {
                
return b;
            }
        }
    }


这个方法明显要比第一次快很多了,直接查表,然后拼接成String,不需要转换成utf-8编码。

数据文件请在http://download.csdn.net/source/263609获取

总之,java中的char类型实际上是存储了unicode编码。目前在nokia 5300上测试通过。
我觉得其它机器也应该是这样。如果哪位大侠知道这方面的资料,请赐教。
分享到:
评论

相关推荐

    GB2312于Unicode互转C语言程序(完整VS2010工程)

    标题中的“GB2312于Unicode互转C语言程序”指的是一个用C语言编写的程序,该程序具有将字符编码从GB2312转换到Unicode,以及从Unicode转换回GB2312的功能。GB2312是中国大陆早期广泛使用的简体中文字符集,而Unicode...

    汉字编码转换工具(汉字与utf-8转换 gb2312转换 unicode 转转

    汉字编码转换工具,实现了汉字与 utf-8 gb2312 unicode 互转,开发者多百多度 qq:547170882

    GB2312转换为Unicode编码表

    用于文字编码转换的GB2312转Unicode数据表,用于文字编码转换的GB2312转Unicode数据表

    GB2312转unicode

    支持中文 GB2312转unicode 最近在做汉字处理 从网上整理的资料 分享给大家 亲测 可用

    gb2312-unicode互转

    gb2312与unicode互相转化。同时还有UTF8的转码 使用了两个表,一个以gb2312顺序,一个以unicode顺序 gb2312转Unicode通过计算获得 unicode转gb2312,需要折半搜索。效率还成。

    国标GB2312到UNICODE的转换程序的软件源码

    本话题主要涉及的是国标GB2312编码到UNICODE(UTF-16)的转换程序,这是一种常见的文本编码转换需求,尤其在中国大陆,因为GB2312是早期广泛使用的简体中文字符集,而UNICODE则是全球通用的字符集,支持多种语言。...

    GB2312,Unicode互转码表

    GB2312,Unicode互转码表

    gb2312tounicode对照表

    2. Unicode到GB2312的转换:相反的过程,将Unicode编码转换为GB2312编码。 3. 编码一致性检查:确定文本是否完全遵循GB2312编码或Unicode编码,以便进行正确的解码。 了解和掌握GB2312与Unicode之间的转换关系,...

    C# GB2312转成Unicode

    本文将深入探讨如何在C#编程环境下将GB2312编码转换为Unicode编码,以解决Unity Web Player对GB2312编码不支持的问题。 首先,让我们了解下GB2312编码。GB2312,全称“汉字国标交换码”,是中国大陆的国家标准汉字...

    GB2312到UNICODE码表

    ### GB2312到Unicode码表转换原理与实践 #### 一、编码背景与概念理解 在深入了解GB2312与Unicode之间的转换之前,我们先简要回顾一下这两种编码的基本概念及其背景。 **GB2312**: GB2312(国标2312)是中国大陆...

    国标GB2312到UNICODE的转换程序

    在VB中实现GB2312到UNICODE的转换,可以使用内建的字符串处理函数,如`Mid()`来获取字节,`AscW()`或`ChrW()`来进行编码转换。此外,VB的`ADODB.Stream`对象也可以方便地处理不同编码的文本文件。 在你提到的源码中...

    国标GB2312到UNICODE的转换程序VISUALBASIC源码系列

    在提供的压缩包中,"GB2312到UNICODE转换"和"国标GB2312到UNICODE的转换程序"可能是实际的VB源代码文件,它们可能包含了处理GB2312字符串到Unicode字符串的函数或类。这些源代码是学习和实践编码转换的好资源,通过...

Global site tag (gtag.js) - Google Analytics