关闭

字符编码的问题

771人阅读 评论(0) 收藏 举报
今天又出现一个字符编码的问题,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,
【参考资料】


1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:261438次
    • 积分:3644
    • 等级:
    • 排名:第9291名
    • 原创:76篇
    • 转载:3篇
    • 译文:0篇
    • 评论:180条
    文章分类
    友情链接
    最新评论