今天又出现一个字符编码的问题,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,