关于java编码问题,我是这样理解的,对吗?
.class文件的编码一定是UNICODE,jvm以UNICODE编码读入.class文件,在jvm所占用的内存中,数据的编码也一定是UNICODE的,这些都与虚拟机参数file.encoding无关。
String类的getBytes()方法会默认读取file.encoding所设置的编码,在调用该方法时,会将编码由UNICODE转换为指定的编码。
而且赞整个程序的运行生命周期内,Charset类的默认编码也是file.encoding所指定的值。
首先你要弄清楚编码和字节,.class文件就是字节内容。为什么要编码,是因为人类看不懂字节,需要展示人类可是识别的符号,比如中文。那么就要有个规则,一个中文字符对应几个字节,这就涉及到GBK,UTF8等的编码。在JVM内存,字符都是UNICODE编码,然后我们需要是使用某一种编码的时候就需要进行重新编码。
getBytes()获取字符的默认编码(系统)或者可以指定编码的字节内容。不同编码的转换其实就是对同一个字节内容的不同形式,有的2个字节标识一个字符,有的需要3个。
说到底计算机只是别01形式的字节码,中文等其他编码的转换都是一种规则。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。