«  Unicode是什么?(转载)   |   Blog首页   |   关于 BOM (Byte Order... »

2006/04/26

一个简单的 GBK 到 utf-8编码转换的尝试

GBK,utf-8 都是对于一个字符的编码方式,对于同一个汉字来说对应于 GBK 中的编码和 utf-8 中的编码是不一样的

例如汉字:“檽”在

    GBK 中的编码为:0x9993

    utf-8 中的编码为:0x6ABD

    即 0x9993 0x6ABD #CJK UNIFIED IDEOGRAPH

关于两种编码表之间的映射关系称为codepage,详细定义可以在unicode官方站点找到,例如 GBK和UNICODE的编码对应关系表在这里可以找到

下面我们可以使用java语言对上述编码做一个尝试:

public class Test {

    public static void main(String[] args) throws UnsupportedEncodingException {

        byte[] b = new byte[2];
        b[0] = (byte) 153;
        b[1] = (byte) 147;

        System.out.println(new String(b));
        System.out.println(new String(b, "GBK"));

        byte[] b2 = new byte[3];
        b2[0] = (byte) 230;
        b2[1] = (byte) 170;
        b2[2] = (byte) 189;

        System.out.println(new String(b2, "utf-8"));

    }

}

解释:

首先进行测试的GBK编码,我们产生一个 byte[] 数组,0x9993对应于数组的两个字节:153,147; 当我们使用new String 转化为一个字符串时,java缺省采用了GBK作为编码(因为我的机器缺省语言设置为GBK); 大家可以看到指定编码和不指定最后输出的是一样的效果。

对于utf-8编码,那么我们需要采用的是unicode编码,即0x6ABD,按照utf-8编码规则:

U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx

规则计算出其对应的二进制为:

11100110 10101010 10111101

对应的十进制为:230  170 189

因此当我们将这三个保存为一个byte[],然后通过编码 utf-8 转为一个字符串时,输出的中文仍然相同!

阿涂 发表于 2006-04-26 11:03  阅读(1404) 评论( 0) 引用( 0) 字符编码
所有人可见

  • 收藏文章:
  • save at del.icio.us
  • save at digg
  • save at my yahoo
  • save at blinklist
  • save at furl
  • save at simpy
  • save at blogmarks
  • submit at reddit
  • save at spurl
  • save at shadows
  • save at rawsugar
  • save at bloglines

引用

http://www.uuzone.com/app/trackBack.do?type=blog&trackBackID=98542

相关内容
更多..

回复列表每两分钟自动刷新一次,想立即刷新吗?点击这里

您的浏览器可能不支持Frame, 优友地带需要使用Frame才能显示正常页面!