系统默认编码需与Java编译/运行时的编码一致(推荐UTF-8)。

echo $LANG,若输出非en_US.UTF-8或类似UTF-8编码,则需修改。export LANG=en_US.UTF-8export LC_ALL=en_US.UTF-8/etc/locale.conf文件,添加LANG=en_US.UTF-8,保存后重启系统或执行source /etc/locale.conf使更改生效。使用javac命令的-encoding参数,强制指定源代码文件的编码(如UTF-8):
javac -encoding UTF-8 YourJavaFile.java若需编译多个文件,可一并指定:
javac -encoding UTF-8 File1.java File2.java File3.java此方法直接解决编译器与文件编码不匹配的问题,是最常用的解决方式。
若编译通过但运行时仍出现乱码,可通过-Dfile.encoding参数设置JVM的默认编码:
java -Dfile.encoding=UTF-8 YourMainClass或在编译时通过-J参数传递给JVM(影响编译过程):
javac -J-Dfile.encoding=UTF-8 YourJavaFile.java此方法适用于需要统一JVM运行时编码的场景。
若需避免每次编译都指定-encoding参数,可创建~/.javacrc(用户级)或/etc/javacrc(系统级)配置文件,添加以下内容:
-J-Dfile.encoding=UTF-8此后,所有javac命令将自动使用UTF-8编码。
确保Java源文件本身以正确编码(如UTF-8)保存。
vim YourJavaFile.java在vim中执行:set fileencoding,查看当前编码。:set fileencoding=utf-8,保存并退出(:wq)。确保JAVA_HOME环境变量指向正确的JDK安装路径(如/usr/lib/jvm/java-11-openjdk-amd64),并将$JAVA_HOME/bin添加到PATH中:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64export PATH=$JAVA_HOME/bin:$PATH将上述命令添加到~/.bashrc或~/.bash_profile,执行source ~/.bashrc使更改生效。同时,建议设置JAVA_TOOL_OPTIONS环境变量,自动传递编码参数:
export JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF-8"此设置对所有Java程序生效。
通过以上步骤,可系统性解决CentOS下Java编译时的文件编码问题。优先推荐编译时指定编码(方法2)和设置系统默认编码(方法1),覆盖大多数场景。若问题仍存在,需检查IDE或构建工具(如Maven、Gradle)的编码配置是否一致。