其实这篇博文是由上一篇博文引起的,因为上一篇提到了getBytes(charsetname)与String(bytes,charsetname)这两个方法,一直对编码解码不是很清楚,这次花费心思下决心搞明白它,在网上各处查资料,现在把我的理解说出来,仅供大家参考
首先要说,java中String的数据是如何存储的,查看源代码就可以知道,String的数据是存储在char[] value这样一个成员变量中的,char类型的大小在java中是2个字节
我们还知道,现在普遍使用的unicode版本是UCS-2,就是使用2个字节表示一个字符的unicode版本,这就对上了,java使用的就是UCS-2标准,所以,String中的value中存储的都是一个个数字
比如’你’的unicode编码是4f60,看下面的测试代码
char c = 你;System.out.println(Integer.toHexString(c));System.out.println(Integer.valueOf(c));System.out.println(c);
结果是:
4f60
20320
你
所以呢,现在我们知道了String内部其实存储的是未经任何编码的unicode编码,就是那个对应字符的编码,然后再看我们这两个方法:
getBytes(charsetname)
意思是根据这个编码来获取字节数组
这又是什么意思呢?
就是说将内存中的unicode编码转换为charsetname