我知道-encoding会决定编译器以什么样的方式来解释源代码。
但是这会不会影响到class中存储的字符串的编码方式呢?

解决方案 »

  1.   

    不会,class文件都是UTF-8的。Java的编译器实际上是调用sun.tools.javac.Main的类,对文件进行编译,这个类有compile函数中间有一个encoding的变量,-encoding的参数其实直接传给encoding变量。编译器就是根据这个变量来读取java文件的,然后用UTF-8形式编译成class文件。
      

  2.   

    不会,class文件都是UTF-8的。Java的编译器实际上是调用sun.tools.javac.Main的类,对文件进行编译,这个类有compile函数中间有一个encoding的变量,-encoding的参数其实直接传给encoding变量。编译器就是根据这个变量来读取java文件的,然后用UTF-8形式编译成class文件。
      

  3.   

    应该有影响吧,否则这个参数就没意义了。
    LS的也说了,编译器就是根据这个变量来读取java文件的,如果java文件是iosxxx的编码,encoding用什么gbk之类的,虽然编译没问题,那么运行时候估计会出乱码。
    其实FileInputStream也有charset参数的,也就是可以根据不同编码打开文件,如果用不同于文件的编码打开文件,就会出现乱码,我是依据这个而推测上面的encoding的。个人看法,仅供参考
      

  4.   

    会有影响。UTF-8是指java程序内部的String存储编码。但是class不一定。
    -encoding决定了编译器以什么编码方式存储文件。你要区分,一个文件的编码方式和字符的编码方式这两个概念。
      

  5.   

    -encoding
    应该是指文件的编码方式
    不会影响字符串的编码
      

  6.   

    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文件的编码。
      

  7.   

    不过,只是感觉,现在我做的项目中,在使用encoding之前是乱码"日潤オ",使用之后变成了 "?",气死我了
      

  8.   

    Specify character encoding used by source files
    不会影响编码方式(java内部默认unicode编码方式 如7楼),但会影响解码效果吧