cmd下java命令启动JVM运行class文件时,可以自动识别不同编码编译后的class文件并加之运行
总结如下:
前提:
1.cmd默认为GBK编码格式;
2.源代码正确
一:程序源代码以GBK格式保存时:
(1)用javac命令去编译这个源代码,一定会OK
(2)用java命令去执行这个编译后的字节码文件,一定会OK
二:程序以源代码UTF-8无BOM格式保存时:
(1)用javac命令去编译这个源代码,要指明使用什么字符集编码格式,才会编译OK,否则报错。(示例命令:javac -encoding UTF-8 HelloWorld.java)
(2)用java命令去执行这个编译后的字节码文件,一定会OK(示例命令:java HelloWorld)
注意:
BOM:即字节顺序标记;它是插入到以UTF-8、UTF16或UTF-32编码Unicode文件开头的特殊标记,用来识别Unicode文件的编码类型。即:指明这个文件以什么编码格式保存的三个隐藏代码;
1.一般记事本会自动加上,若不想添加BOM,就将源代码保存为某字符集无BOM格式。
2.一般IDEA等IDE就不会主动加隐藏代码BOM
三:程序以源代码UTF-8格式保存时(有BOM隐藏代码):
(1)用javac命令去编译这个源代码,会报错,原因就是cmd中无法解析BOM三个隐藏代码
(2)解决方法:将源代码重新保存为UTF-8无BOM格式。再重复上文(二)的步骤,就OK
四:为什么任意编码格式的java源码都可以被编译?
1.编码不影响代码的正确性,只是不同字符集编码标准不一样;
就相当于,你用英文表达你好,和你用中文表达你好一样,只不过是各个国家标准不同而已
2.cmd下java命令启动JVM运行class文件时,可以自动识别不同编码的class文件并加之运行(比喻:无论我说中文还是英文,它都听得懂!)
五:程序以其他字符集编码格式保存时,依此类推。
六·注意:
1.这只是个人的经验总结,没有涉及底层源码。
2.底层源码应该与“编译原理”有关。本人暂不了解。
3.若有错误,敬请斧正