现在的位置: 首页 > 综合 > 正文

字符编码的问题

2013年02月10日 ⁄ 综合 ⁄ 共 1514字 ⁄ 字号 评论关闭
今天又出现一个字符编码的问题,jvm默认的是用的与本地操作系统有关系,一般是iso-8859-1编码,此对中文是丢失的。
那下面我简单讲下,对于编码的理解。
【导言】
计算机是处理数字与字母的。在创造Unicode之前,有数百种指定这些数位的编码系统,没有一个编码可以包含足够的字元。

有如此所的编码,每个之间还存在冲突,所以就必要要有一个强大的编码系统,能处理所有的字符,一统江湖。那Unicode就出现了。
Unicode就是我们经常讲的 统一码、标准国际码。

简单地讲,Unicode就规定了 字符与 8个16进制之间的关系。并规定,如果最小的字节能表示的话,那就用最小字节。如:字母数字,用两位,汉子用四位。

【其他编码咋回事?】

     我们接触的编码常见的有:

"iso-8859-1""gb2312""gbk""utf-16""utf-8" 

其他的编码就是对Unicode的号码,再进行一个算法的运算如已。
注意iso-8859-1是对ASCII 码的扩展,不能用来编码汉字
     如:Unicode码为:49,20,61,6d,20,66f9,9f99,
      String strings = "I am
曹龙"
;

        char[]
chars = strings.toCharArray();
        for (char b
: chars) {
            System.out.print(b + ",");
        }
        System.out.println();
        for (char b
: chars) {
            System.out.print(Integer.toHexString(b)
",");
        }
        String[] charsets = { "iso-8859-1""gb2312""gbk""utf-16""utf-8" };
        for (String
charset : charsets) {
            System.out.print("\n" +
charset + 
":");
            for (byte b
: strings.getBytes(charset)) {
                System.out.print(Integer.toHexString(b)
",");
            }
        }
输出的结果为:
I, ,a,m, ,曹,龙,
49,20,61,6d,20,66f9,9f99,
iso-8859-1:49,20,61,6d,20,3f,3f,
gb2312:49,20,61,6d,20,ffffffb2,ffffffdc,ffffffc1,fffffffa,
gbk:49,20,61,6d,20,ffffffb2,ffffffdc,ffffffc1,fffffffa,
utf-16:fffffffe,ffffffff,0,49,0,20,0,61,0,6d,0,20,66,fffffff9,ffffff9f,ffffff99,
utf-8:49,20,61,6d,20,ffffffe6,ffffff9b,ffffffb9,ffffffe9,ffffffbe,ffffff99,

【参考资料】


抱歉!评论已关闭.