« 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)
字符编码
所有人可见
相关内容
回复列表每两分钟自动刷新一次,想立即刷新吗?点击这里







