Java中乱码问题解决

问题是这样的,我使用sublime编辑器编写java代码,所使用的编码是UTF-8编码。代码非常简单,如下:

public class IntSty {
    public static void main (String [] args) {
        String str = "你好中国";
        int len = str.length();

        System.out.println(len);
        System.out.println(str);
    }
}

输出的结果让我很意外,len的值为6,而str的值是乱码的“浣犲ソ涓浗”。

然后,我又试着使用系统默认的ANSI编码来看看会出现啥情况,发现使用ANSI编码编写的文件没有出现乱码,能够正确显示字符串长度及字符串。

查阅了一番资料后,终于搞明白了。原来,java在编译的时候,如果没有加-encoding选项的话,就会使用系统当前的默认编码来读取源文件,然后再将其转换为utf-8编码,接着再进行编译。

所以,乱码的根本问题不是你的源文件所采用的是哪种编码,你只要在编译时正确告诉机器你所使用的是什么编码,就不会产生乱码。

现在重新编译,加入编码的选项,再试试看

javac -encoding utf-8 IntSty.java

java IntSty
4
你好中国

这样,使用utf-8编码文件也不会产生乱码了。