Java properties.store应该仅对字符集中的字符进行编码

问题描述

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

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

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

这就是我当前的存储方法

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

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

解决方法

精确地满足您的要求,您必须编写特定的代码。

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

\uxxxx版本使用store​(OutputStream,String) Unicode转义来显式支持ISO-8859-1。唯一的区别是,对于无法通过ASCII打印的所有内容,它都经常使用这种转义,因此\uxxxx将被写为Â

基本原理是生成的文件有效地进行了ASCII编码,因此可以与广泛的阅读器兼容(使用ASCII,许多ISO-8859版本和派生版本,UTF-8等)。