Java中Properties读取中文需用UTF-8无BOM保存文件,并通过InputStreamReader指定UTF-8编码加载;Maven需配置project.build.sourceEncoding为UTF-8;禁用native2ascii转义。

Java 中 Properties 默认使用 ISO-8859-1 编码读取配置文件,直接写中文会导致乱码。要正确读取中文,关键在于确保文件保存编码与读取方式匹配,且避免依赖默认构造函数。
确保 properties 文件以 UTF-8 无 BOM 格式保存
编辑器(如 IntelliJ、VS Code、Notepad++)需明确将 .properties 文件另存为 UTF-8(不带 BOM)。带 BOM 的 UTF-8 会被 Java 误识别为非法字符,导致加载失败或异常。
用 InputStream + 指定编码读取(推荐)
不要用 properties.load(new FileInputStream("xxx.properties")),而应通过 InputStream 并配合 load(Reader) 方法指定 UTF-8:
- 使用
Files.newInputStream(Paths.get("xxx.properties"))获取流 - 包装成
InputStreamReader,显式指定StandardCharsets.UTF_8 - 再调用
properties.load(reader)
示例代码:
Properties props = new Properties();
try (InputStream is = Files.newInputStream(Paths.get("config.properties"));
Reader reader = new InputStreamReader(is, StandardCharsets.UTF_8)) {
props.load(reader);
}避免使用 .properties 文件名直接加载资源时的陷阱
若用 Class.getResourceAsStream("/config.properties"),需确认构建工具(Maven/Gradle)未对 resources 目录下的 .properties 做编码转换。Maven 默认按平台编码处理资源,建议在 pom.xml 中显式配置:
<project><properties><project.build.sourceencoding>UTF-8</project.build.sourceencoding></properties></project>
不推荐:用 native2ascii 转义中文(过时且繁琐)
虽然 JDK 提供 native2ascii 工具可将中文转为 \uXXXX 形式,但维护成本高、可读性差,现代项目应优先采用 UTF-8 + 正确读取方式,而非倒退到转义方案。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











