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