Java企业级后端项目必须全程强制使用UTF-8编码,形成“源码→编译→打包→运行→IO→日志→网络”完整闭环;需统一IDE三处编码设置、构建工具显式声明、JVM启动参数强制指定、所有IO与网络操作显式传入StandardCharsets.UTF_8。

Java 企业级后端项目必须全程强制使用 UTF-8 编码,形成从源码编写到网络响应的完整闭环。任何一环缺失 UTF-8 显式声明,都可能在跨环境部署、日志分析或接口调用中引发中文乱码、编译失败甚至线上数据异常。
源码与 IDE 编码三统一
物理文件编码、IDE 全局设置、项目级配置必须全部设为 UTF-8(无 BOM):
- IntelliJ IDEA:Settings → Editor → File Encodings → Global Encoding、Project Encoding、Default encoding for properties files 全部选 UTF-8;勾选 “Transparent native-to-ascii conversion”(保障 .properties 中文可读)
- Eclipse:Preferences → General → Workspace → Text file encoding 设为 UTF-8;右键项目 → Properties → Resource → Text file encoding 同步设为 UTF-8
- 存量文件需验证真实编码:Linux/macOS 下执行 file -i *.java;Windows 可用 Notepad++ 查看“编码”菜单,清除 GBK/ANSI 残留
构建工具显式声明编码
IDE 设置不传递给编译器,Maven 和 Gradle 必须在配置中硬编码指定:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- Maven(pom.xml):
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
并确保maven-compiler-plugin的<encoding>子项也为 UTF-8 - Gradle(build.gradle):
compileJava.options.encoding = "UTF-8"
compileTestJava.options.encoding = "UTF-8"
JVM 运行时强制生效
未指定 -Dfile.encoding=UTF-8 时,String.getBytes()、new String(byte[])、InputStreamReader 等默认依赖操作系统编码,Windows(GBK)与 Linux(UTF-8)行为不一致:
立即学习“Java免费学习笔记(深入)”;
- Spring Boot 打 jar 包运行:启动命令必须加参数,例如 java -Dfile.encoding=UTF-8 -jar app.jar
- IDE 运行配置(如 IDEA Run Configuration):在 VM options 中填入 -Dfile.encoding=UTF-8
- 验证是否生效:运行
System.out.println(Charset.defaultCharset());,输出应为 UTF-8
IO 与网络操作不依赖默认
凡是涉及字节与字符串互转的 API,只要没传 Charset 参数,就是潜在风险点:
- 读写文件:用
Files.readAllLines(path, StandardCharsets.UTF_8),不用无参版本 - 字符流:用
InputStreamReader(in, StandardCharsets.UTF_8),避免无参构造 - HTTP 响应:Servlet 中调用
response.setCharacterEncoding("UTF-8"),且必须在response.getWriter()之前 - JSON 序列化(如 Jackson):配置
ObjectMapper的setDefaultCharset(StandardCharsets.UTF_8) - .properties 文件:启用 Spring 的
@PropertySource(encoding = "UTF-8"),或改用 YAML/JSON 格式替代

















