在 CentOS 上编译 Java 时指定编码,核心就是给 javac 加上 -encoding 参数。下面按常见场景说明。
javac -encoding UTF-8 Hello.java
javac -encoding GBK Hello.java
✅ 这是最关键的一点:
javac默认使用 系统编码,CentOS 中文环境可能是 GBK,容易导致乱码,一定要显式指定-encoding。
javac -encoding UTF-8 *.java
或指定目录:
javac -encoding UTF-8 -d out src/*.java
javac -D 或环境变量(不推荐)⚠️ 注意:
javac -Dfile.encoding=UTF-8 不会生效,这是 JVM 参数,不是编译器参数。
✅ 正确方式仍然是:
javac -encoding UTF-8
pom.xml 中指定编码(强烈推荐)<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
</properties>
或:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<encoding>UTF-8</encoding>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
然后:
mvn clean package
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
locale
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
编辑:
vi /etc/locale.conf
内容:
LANG=en_US.UTF-8
然后:
source /etc/locale.conf
❌ 错误:
javac Hello.java
如果源码是 UTF-8,但系统是 GBK,会乱码。
✅ 正确:
javac -encoding UTF-8 Hello.java
CentOS 编译 Java 指定编码,统一用:
javac -encoding UTF-8;Maven/Gradle 项目在构建工具中配置。
如果你愿意,可以把你的 Java 版本 / Maven / 编译报错信息贴出来,我可以帮你精准定位。