大家好,请教个问题:
String s="abc你好";
byte[] by=s.getBytes();
输出by.length();
在系统默认编码为GBK是输出7;
在系统默认编码为utf-8时输出9;
我的疑问:
(1)"abc你好"保存为gbk源码时,"abc"各一个字节,"你好"各两个字节,共7个字节,而保存为utf-8源码时,"abc"各一个字节,"你好"各3个字节,共9字节,这些我都能理解。
(2)但是源程序被编译成字节码后,s到了java程序中,都是以unicode编码标识的,每个字符是2个字节,s.getBytes()是怎样把s编成字节数组的呢,是针对的unicode编码呢,还是默认编码呢?如果是针对unicode,怎么会在不同默认编码下有不同结果呢?如果是针对默认编码,但程序执行的是字节码,源文件都被编译了,干嘛还针对默认编码呢?
唉,糊涂了!
请详细解释一下!最好是对编码过程有个介绍,谢谢!