java - 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 方法只编码字符集允许的内容?
解决方案
为了完全满足您的要求,您必须编写特定的代码。
开箱即用的最佳选择是使用该store(OutputStream, String)
版本。该store(Writer, String)
方法不支持\uxxxx
unicode 转义(它假定您使用能够表示所有相关字符的 Writer)。
该store(OutputStream, String)
版本明确支持 ISO-8859-1,使用\uxxxx
unicode 转义。唯一的区别是它过于频繁地使用这种转义,对于所有不能 ASCII 打印的东西,所以Â
会写成\u00c2
.
基本原理是生成的文件是有效的 ASCII 编码的,因此与广泛的阅读器兼容(使用 ASCII、许多 ISO-8859 版本和衍生品、UTF-8,...)。
推荐阅读
- python-3.x - 将大型文本文件读入数据框中以在 Python 中进行数据分析
- ios - UICollectionView 没有响应 UISearchBar
- extjs - ExtJS 为隐藏字段赋值
- pandas - 循环遍历 Pandas 数据框并添加注释
- haskell - 从 Haskell 元组中获取第一个值时遇到问题
- php - 使用循环php从单选按钮中获取多个值
- function - 在 Haskell 中覆盖 +
- javascript - IE 11 上的无限加载屏幕(反应)
- javascript - 解析相对于另一个路径而不是当前工作目录的相对路径
- php - 在 laravel 5.6 中找不到 Trait 'App\HasRoles' 错误