You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用java.util.Properties读取含重音字符的properties文件问题

解决Java Properties读取重音字符丢失的问题

这个问题我碰到过好几次,确实是Properties默认编码的坑搞的鬼。咱们一步步来解决:

方法一:正确使用Unicode转义符

你之前的操作有误——你是直接把重音字符删掉换成了普通字符,而不是转换成对应的Unicode转义码。正确的做法是把每个重音字符替换成它的Unicode转义形式:

  • é → \u00e9
  • è → \u00e8
  • ô → \u00f4

所以你的属性行应该修改为:

FORM_GENERATOR_VALUE=G\u00e9n\u00e9rateur de formulaires

这样用默认的load(InputStream)加载时,Properties会自动把转义码解析回对应的重音字符。

方法二:指定编码用Reader加载(更推荐)

如果觉得Unicode转义可读性太差,不想手动替换字符,更直观的方式是用Reader指定编码加载文件。因为Properties.load(InputStream)硬编码使用ISO 8859-1,但load(Reader)允许你自定义编码。

只要你的constants.properties文件保存为UTF-8编码(注意不要带BOM,Java对UTF-8 BOM的支持不太友好),就可以用下面的代码加载:

import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Properties;

public class YourClass {
    public Properties constants = new Properties();

    // 初始化方法
    public void loadConstants() throws Exception {
        constants.load(new InputStreamReader(
            new FileInputStream("constants.properties"),
            StandardCharsets.UTF_8
        ));
    }
}

如果你的Java版本低于7(现在应该很少见了),可以把StandardCharsets.UTF_8换成字符串"UTF-8"。

这两种方法都能解决重音字符丢失的问题,你可以根据自己的需求选择:转义符方式兼容性更强(所有Java版本都支持,文件是ISO-8859-1兼容),而指定编码的方式可读性更好,维护起来更方便。

内容的提问来源于stack exchange,提问作者Grumbunks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:24:01