读取和写入 Java 没有 unicode 转义的属性
Read and Write Java Properties without unicode escapes
这个问题可能已经被问到并回答了 100 次,但不幸的是我没有找到适合我的问题的内容。
以下情况:我遇到问题,当我读取属性更改它们然后再次写入时,所有特殊字符都是 unicode 转义的。
例如“:”变成“\:”或
描述变为 Descripci\u00F3n
有没有办法改变存储方法,使特殊字符不被转义?
非常感谢
这是我编写属性的代码:
private static void writeUpdatedPropertiesFile(Properties newProperties, File sourceAndDestinationFile) {
sourceAndDestinationFile.delete();
try (FileOutputStream out = new FileOutputStream(sourceAndDestinationFile)) {
newProperties.store(out, null);
}
catch (final IOException e) {
e.printStackTrace();
}
}
您可以使用 store(Writer) 而不是 store(OutputStream)。您可以使用您希望的任何字符集构造一个 OutputStreamWriter:
try (Writer out = new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream(sourceAndDestinationFile),
StandardCharsets.UTF_8))) {
newProperties.store(out, null);
} catch (IOException e) {
e.printStackTrace();
}
当然,您有责任知道该文件是 UTF-8 文件,并使用 load(Reader) 而不是使用 InputStream:
来读取它
try (Reader in = new BufferedReader(
new InputStreamReader(
new FileInputStream(sourceAndDestinationFile),
StandardCharsets.UTF_8))) {
properties.load(in);
} catch (IOException e) {
// ...
}
我用自定义编写器方法解决了它:
private static void writeProperties(Properties properties, File destinationFile) {
try (final BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(destinationFile), "Cp1252"))) {
for (final Object o : properties.entrySet()) {
final String keyValue = o.toString();
writer.write(keyValue + "\r\n");
}
}
catch (final IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这个问题可能已经被问到并回答了 100 次,但不幸的是我没有找到适合我的问题的内容。
以下情况:我遇到问题,当我读取属性更改它们然后再次写入时,所有特殊字符都是 unicode 转义的。
例如“:”变成“\:”或 描述变为 Descripci\u00F3n
有没有办法改变存储方法,使特殊字符不被转义?
非常感谢
这是我编写属性的代码:
private static void writeUpdatedPropertiesFile(Properties newProperties, File sourceAndDestinationFile) {
sourceAndDestinationFile.delete();
try (FileOutputStream out = new FileOutputStream(sourceAndDestinationFile)) {
newProperties.store(out, null);
}
catch (final IOException e) {
e.printStackTrace();
}
}
您可以使用 store(Writer) 而不是 store(OutputStream)。您可以使用您希望的任何字符集构造一个 OutputStreamWriter:
try (Writer out = new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream(sourceAndDestinationFile),
StandardCharsets.UTF_8))) {
newProperties.store(out, null);
} catch (IOException e) {
e.printStackTrace();
}
当然,您有责任知道该文件是 UTF-8 文件,并使用 load(Reader) 而不是使用 InputStream:
来读取它try (Reader in = new BufferedReader(
new InputStreamReader(
new FileInputStream(sourceAndDestinationFile),
StandardCharsets.UTF_8))) {
properties.load(in);
} catch (IOException e) {
// ...
}
我用自定义编写器方法解决了它:
private static void writeProperties(Properties properties, File destinationFile) {
try (final BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(destinationFile), "Cp1252"))) {
for (final Object o : properties.entrySet()) {
final String keyValue = o.toString();
writer.write(keyValue + "\r\n");
}
}
catch (final IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}