带有重音字符的Java Properties文件

use*_*381 3 java spring utf-8 properties-file

我正在尝试从文本文件加载一个属性,但重音字符(saül)有一个不同的编码,而不是UTF-8如何避免它?

我的属性文件有一个带有重音字符的属性(saül).然而,当我远程调试时,我发现了properties.load(bufferedReader); 把它当作saül所以当我写入另一个文件时它被写成saül,我在应用程序的其他地方都有UTF-8编码.从文件中读取属性时,我不确定我做错了什么.

try {
    final String propertyFilePath = System.getProperty(JVM_ARGUMENT_NAME);
    if (StringUtils.hasText(propertyFilePath)) {
        setLocalOverride(true);
        resource = getApplicationContext().getResource(propertyFilePath);
        BufferedReader bufferedReader =
            new BufferedReader(new InputStreamReader(new FileInputStream(propertyFilePath), "UTF8"));
        properties.load(bufferedReader);
        externalFilePasswordConfigurer.afterPasswordPropertiesSet(properties);
        LOGGER.info("ExternalFilePropertyConfigurer UTF-8 Reader");
    }
    setProperties(properties);
    logProperties(properties);
} catch (Exception e) {
    LOGGER.error("ExternalFilePropertyConfigurer setter failed to set properties: ", e);
    throw new RuntimeException(e);
}
Run Code Online (Sandbox Code Playgroud)

WPo*_*ier 6

老问题,但据我所知,任何.properties文件必须在ISO-8859-1字符集中,否则会有麻烦.

如果在属性文件中需要重音字符,则必须用其unicode版本替换每个字符.在这种特殊情况下"索尔"必须改为"sa\u00FCl",这里\u00FC"ü".

另一种解决方案是将文件类型从.properties更改为.xml

请参阅此处的java文档:

load(Reader)/ store(Writer,String)方法以下面指定的简单的面向行的格式从基于字符的流加载和存储属性.load(InputStream)/ store(OutputStream,String)方法与load(Reader)/ store(Writer,String)对的工作方式相同,只是输入/输出流以ISO 8859-1字符编码进行编码.无法在此编码中直接表示的字符可以使用"Java™语言规范"第3.3节中定义的Unicode转义编写; 在转义序列中只允许一个'u'字符.native2ascii工具可用于将属性文件转换为其他字符编码或从其他字符编码转换.