专注海量数据

欲穷千里目,更上一层楼-阿里巴巴hadoop开发

字符编码的问题

今天又出现一个字符编码的问题,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,
【参考资料】


阅读更多
文章标签: string jvm 算法 扩展
个人分类: java
想对作者说点什么? 我来说一句

字符 编码 概述

2009年07月24日 41KB 下载

HTML特殊字符编码

2008年11月11日 114KB 下载

统一字符编码

2013年04月21日 25.33MB 下载

java字符编码监听器

2009年09月26日 2KB 下载

ASCII字符编码

2011年09月12日 164KB 下载

HTML特殊字符编码大全

2012年04月12日 33KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭