Java企业级后端项目必须全程强制使用UTF-8编码,覆盖源码→编译→运行→资源加载→网络交互全链路;需统一IDE、构建工具、JVM参数及IO操作的UTF-8配置,禁用系统默认编码。

Java 中处理国际化字符,编码统一规范的核心是全程锁定 UTF-8,覆盖“源码→编译→运行→资源加载→网络交互”全链路,不能只在某一处设,也不能依赖系统默认。
源文件与资源文件必须存为 UTF-8(无 BOM)
所有 .java 和 .properties 文件(如 messages_zh_CN.properties)都必须以 UTF-8 无 BOM 格式保存。IDE 中需同步三处设置:
- IntelliJ IDEA:Settings → Editor → File Encodings → Global Encoding、Project Encoding、Default encoding for properties files 全部设为 UTF-8
- 勾选 Transparent native-to-ascii conversion(保障 .properties 中文可读,避免手动转义)
- Eclipse:Workspace 编码 + 单个项目 Resource → Text file encoding 均设为 UTF-8;检查
.settings/org.eclipse.core.resources.prefs是否含encoding=UTF-8
构建过程强制声明 UTF-8
Maven 或 Gradle 不会继承 IDE 设置,必须显式配置:
- Maven(
pom.xml):
<properties><br> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><br> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><br> </properties>
同时确认maven-compiler-plugin的<encoding></encoding>也为 UTF-8 - Gradle(
build.gradle):
compileJava.options.encoding = "UTF-8"<br> compileTestJava.options.encoding = "UTF-8"
运行时 JVM 层面必须指定编码
不加参数时,String.getBytes()、new String(byte[])、InputStreamReader 等都会用系统默认编码(Windows 常为 GBK),跨环境极易出错:
立即学习“Java免费学习笔记(深入)”;
- Spring Boot jar 启动:必须加
-Dfile.encoding=UTF-8,例如java -Dfile.encoding=UTF-8 -jar app.jar - IDE 运行配置(如 IDEA Run Configuration):VM options 中填入该参数
- Linux/macOS 验证 locale:执行
locale | grep UTF;Windows 可运行chcp 65001
国际化资源加载与文本处理要显式用 UTF-8
ResourceBundle 默认按平台编码加载 .properties,容易导致中文 key 或 value 解析失败:
- Spring 环境推荐使用
@PropertySource(encoding = "UTF-8") - 手动加载时,优先用
ResourceBundle.getBundle("messages", locale, new UTF8Control())(自定义Control子类,重写newBundle方法,强制用Files.newInputStream(..., StandardCharsets.UTF_8)) - 涉及文件 IO 或 HTTP 响应体时,所有
Files.readAllLines、InputStreamReader、HttpServletResponse.setCharacterEncoding("UTF-8")等操作,必须传入StandardCharsets.UTF_8参数,绝不省略


















