Java环境搭建完成后如何配置编码格式_Java编码问题解决方案

IDEA 中 project encoding 和 file encoding 必须一致:Global Encoding、Project Encoding 及 properties 文件编码均设为 UTF-8,并勾选透明转换;命令行编译需加 -encoding UTF-8;Maven 项目须在 pom.xml 中声明 project.build.sourceEncoding=UTF-8;修改后需清理 target/out 目录并重建。

IDEA 中 project encoding 和 file encoding 必须一致

Java 编译和运行时对源文件编码敏感,javac 默认按系统编码读取 .java 文件。Windows 上常是 GBK,Linux/macOS 是 UTF-8,但现代项目统一用 UTF-8 才能避免中文乱码、编译报错(如 非法字符: '\u3000')。

IntelliJ IDEA 里两个关键设置必须同步:

  • File → Settings → Editor → File Encodings → Global Encoding:设为 UTF-8
  • File → Settings → Editor → File Encodings → Project Encoding:也设为 UTF-8
  • File → Settings → Editor → File Encodings → Default encoding for properties files:若用 .properties,此处也选 UTF-8,并勾选 Transparent native-to-ascii conversion(否则中文会被自动转成 \u4f60\u597d

命令行编译时显式指定 -encoding 参数

即使 IDE 配好了,用 javac 手动编译仍可能出错——因为 javac 不读取 IDE 配置,它只看系统默认编码或你传的参数。

正确做法是每次编译都加 -encoding UTF-8

javac -encoding UTF-8 HelloWorld.java

漏掉这个参数,在 Windows 上用 javac HelloWorld.java 编译含中文的源码,大概率报错:

error: unmappable character (0xE4) for encoding GBK

如果项目有多个源文件,建议写个简单脚本或 Makefile 封装该参数,避免遗漏。

Maven 项目需在 pom.xml 中声明 project.build.sourceEncoding

Maven 默认不强制源码编码,它会继承系统编码,导致不同机器上构建结果不一致。CI/CD 流水线尤其容易因此失败。

pom.xml 块中明确声明:


  UTF-8

这个配置会影响:maven-compiler-pluginmaven-resources-pluginmaven-surefire-plugin 等插件的行为。不设的话,mvn compile 可能在某些环境静默使用 GBK,编译通过但运行时报 ClassNotFoundException 或字符串内容异常。

检查并清理已存在的乱码 class 文件

编码配置改完后,旧的 .class 文件可能仍是错误编码生成的,继续运行会复现乱码或逻辑错误(比如 if (name.equals("张三")) 永远不成立)。

务必执行以下操作:

  • 删除整个 target/ 目录(Maven)或 out/ 目录(IDEA 默认输出)
  • 重新 Build → Rebuild Project
  • 验证:用 file -i HelloWorld.class(Linux/macOS)或 xxd HelloWorld.class | head 粗略确认无异常字节;更直接的是运行时打印字符串的 getBytes(StandardCharsets.UTF_8).length,对比预期

这个步骤常被跳过,结果以为配好了,实际还在跑“带伤”的字节码。