javac -encoding 对class的编码有没有影响??
我知道-encoding会决定编译器以什么样的方式来解释源代码。
但是这会不会影响到class中存储的字符串的编码方式呢?
------解决方案--------------------不会,class文件都是UTF-8的。Java的编译器实际上是调用sun.tools.javac.Main的类,对文件进行编译,这个类有compile函数中间有一个encoding的变量,-encoding的参数其实直接传给encoding变量。编译器就是根据这个变量来读取java文件的,然后用UTF-8形式编译成class文件。
------解决方案--------------------不会影响
------解决方案--------------------应该有影响吧,否则这个参数就没意义了。
LS的也说了,编译器就是根据这个变量来读取java文件的,如果java文件是iosxxx的编码,encoding用什么gbk之类的,虽然编译没问题,那么运行时候估计会出乱码。
其实FileInputStream也有charset参数的,也就是可以根据不同编码打开文件,如果用不同于文件的编码打开文件,就会出现乱码,我是依据这个而推测上面的encoding的。
个人看法,仅供参考
------解决方案--------------------会有影响。UTF-8是指java程序内部的String存储编码。但是class不一定。
-encoding决定了编译器以什么编码方式存储文件。
你要区分,一个文件的编码方式和字符的编码方式这两个概念。
------解决方案---------------------encoding
应该是指文件的编码方式
不会影响字符串的编码
------解决方案--------------------Java语言内部采用的是Unicode编码的,其编译产生的.class文件也是unicode编码。
运行javac.exe时,它首先获得我们操作系统默认采用的编码格式,也即在编译java程序时,若我们不指定源程序文件的编码格式,JDK首先获得操作系统的file.encoding参数,然后JDK就把我们的java源程序从file.encoding编码格式转化为JAVA内部默认的UNICODE格式放入内存中。然后,javac把转换后的unicode格式的文件进行编译成.class类文件,此时.class文件是UNICODE编码的,它暂放在内存中,紧接着,JDK将此以UNICODE编码的编译后的class文件保存到我们的操作系统中形成我们见到的.class文件。对我们来说,我们最终获得的.class文件是内容以UNICODE编码格式保存的类文件。
也可以通过-encoding强制指定,该参数是用来告诉编译器源文件中的字符串的编码方法是什么,并不影响最终.class文件的编码。
------解决方案--------------------同意 5楼的
------解决方案--------------------同意7楼!
------解决方案--------------------Specify character encoding used by source files不会影响编码方式(java内部默认unicode编码方式 如7楼),但会影响解码效果吧
------解决方案--------------------支持7楼的观点