首页 > 解决方案 > Java properties.store() 应该只对字符集中的字符进行编码

问题描述

我需要使用字符集 ISO_8859_1 创建一个属性文件。在这个文件中,我必须存储不属于这个字符集的字符。不幸的是,将字符集更改为例如 UTF-8 不是一种选择。但是,这些字符已经作为 Unicode 转义序列传递。目标是在创建文件时不会对它们进行解释,而是保留为 Unicode 转义序列。

应该如何:
\u00C2 -> Â
\ u2193 -> \u2193

目前情况如何:
\u00C2 -> Â
\u2193 -> ?

这是我当前的 store 方法的样子:

properties.store(new BufferedWriter(
        new OutputStreamWriter(new FileOutputStream(sourceAndDestinationFile), StandardCharsets.ISO_8859_1)), null);

有没有办法告诉 store 方法只编码字符集允许的内容?

标签: javaproperties

解决方案


为了完全满足您的要求,您必须编写特定的代码。

开箱即用的最佳选择是使用该store​(OutputStream, String)版本。该store​(Writer, String)方法不支持\uxxxxunicode 转义(它假定您使用能够表示所有相关字符的 Writer)。

store​(OutputStream, String)版本明确支持 ISO-8859-1,使用\uxxxxunicode 转义。唯一的区别是它过于频繁地使用这种转义,对于所有不能 ASCII 打印的东西,所以Â会写成\u00c2.

基本原理是生成的文件是有效的 ASCII 编码的,因此与广泛的阅读器兼容(使用 ASCII、许多 ISO-8859 版本和衍生品、UTF-8,...)。


推荐阅读