系统默认编码需与Java编译/运行时的编码一致(推荐UTF-8)。
echo $LANG,若输出非en_US.UTF-8或类似UTF-8编码,则需修改。export LANG=en_US.UTF-8
export 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-amd64
export 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)的编码配置是否一致。