我一直在使用Apache Commons Configuration2来管理属性文件。问题是,在将配置保存到文件时,特殊字符将替换为其Java源代码;与a=Rumänien -> a=Rum\u00E4nien
中一样。
有什么方法可以避免这种情况吗?最好使用FileHandlers或类似的Writers / Streams,因为我无法使用Apache提供的Builder。
正确执行读数。如果我设置断点,我可以看到存储的正确值,但是,只要我想保持配置,我就会得到那种结果。
这是一个MCVE,请注意您需要链接以下Apache库:
public static void main(final String[] args) {
final String inputPath = "C:\\yourFullPath\\properties_in.cfg";
final String outputPath = "C:\\yourFullPath\\properties_out.cfg";
final PropertiesConfiguration config = new PropertiesConfiguration();
try {
// Load the config
final FileHandler inputHandler = new FileHandler(config);
inputHandler.setEncoding("UTF-8");
inputHandler.setPath(inputPath);
inputHandler.load();
// Save the config in a different file
final FileHandler outputHandler = new FileHandler(config);
outputHandler.setEncoding("UTF-8");
outputHandler.setPath(outputPath);
outputHandler.save();
} catch (final Exception e) {
e.printStackTrace();
}
}
运行代码前后properties_in.cfg
的内容为a=Rumänien
。
properties_out.cfg
不存在,执行完成后其内容为a=Rum\u00E4nien
答案 0 :(得分:2)
原因是,Java的属性文件的严格定义要求它们采用ISO-8859-1
编码,并且不在其中的所有Unicode字符都将使用\uXXXX
转义编码。所以技术上说出一切都按照规定运作。
如果库允许它(可能带有custom writer),你可以破解它编写UTF-8而不执行转义。