使用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
相关产品推荐
相关产品推荐

