我正在尝试从文本文件中加载一个属性,但重音字符(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);
}
答案 0 :(得分:5)
老问题,但据我所知,任何.properties文件必须在ISO-8859-1字符集中,否则会有麻烦。
在属性文件中需要重音字符时,每个字符必须替换为其unicode版本。在这种特殊情况下,“saül”必须更改为"sa\u00FCl"
,其中\u00FC
为"ü"
。
另一种解决方案是将文件类型从.properties更改为.xml
加载(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