带有重音字符的Java Properties文件

时间:2014-12-08 17:36:03

标签: java spring utf-8 properties-file

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

我的属性文件有一个带有重音字符的属性(saül)。然而,当我进行远程调试时,我发现 properties.load(bufferedReader); 将其视为saül,因此当我写入另一个文件时,它会被写为saül< / em>,我在应用程序的其他地方都有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);
}

2 个答案:

答案 0 :(得分:5)

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

在属性文件中需要重音字符时,每个字符必须替换为其unicode版本。在这种特殊情况下,“saül”必须更改为"sa\u00FCl",其中\u00FC"ü"

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

See java documentation here

  

加载(Reader)/存储(Writer,String)方法加载和存储   简单的基于字符的流的属性   下面指定的面向行的格式。负载(InputStream)/   store(OutputStream,String)方法的工作方式与   load(Reader)/ store(Writer,String)对,输入/输出除外   流以 ISO 8859-1字符编码编码。那些人物   不能直接表示在这种编码中可以编写使用   Unicode转义,如Java™语言的第3.3节中所定义   规格;在逃脱中只允许一个'u'字符   序列。 native2ascii工具可用于转换属性文件   与其他角色编码有关。

答案 1 :(得分:0)

我知道这个问题很旧,但是我遇到了同样的问题,并且不想将重音符号更改为其unicode编码版本。

所以我在pom.xml中添加了以下插件

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>native2ascii-maven-plugin</artifactId>
    <version>2.0.1</version>
    <executions>
            <execution>
                    <goals>
                            <goal>resources</goal>
                    </goals>
                    <phase>process-resources</phase>
                    <configuration>
                            <srcDir>src/main/resources</srcDir>
                            <targetDir>${project.build.outputDirectory}</targetDir>
                            <encoding>${project.build.sourceEncoding}</encoding>
                            <includes>
                                    <include>message.properties</include>
                            </includes>
                    </configuration>
            </execution>
    </executions>
</plugin>

您可以在此处了解有关该插件的更多信息 https://github.com/mojohaus/native2ascii-maven-plugin