我一直在研究一个执行以下操作的场景:
- 获取Unicode格式的输入数据; [UTF-8]
- 转换为 ISO-8559;
- 检测并替换不支持的编码字符; [基于用户定义的键值对]
我的问题是,我一直在尝试深入查找有关 ISO-8559 的信息,但还没有成功。有没有人对这件事了解更多?这与 ISO-8859 有什么不同?任何细节都会很有帮助。
其次,将 ISO-8559 要求放在一边,我继续编写程序,用 Java 将传入数据转换为 ISO-8859。虽然我能够使用基于字符的替换来实现所需的目的,但当数据量很大时,它显然似乎很耗时。 [以 MB 为单位]
我确信一定有更好的方法来做到这一点。有人可以给我建议吗?
最佳答案
我假设您想要将 UTF-8 转换为 ISO-8859 -1,即 Western Latin-1。网上有很多字符集表。
一般来说,对于网络浏览器和 Windows,最好转换为 Windows-1252,这是一个重新定义范围 0x80 - 0xBF 的扩展,下面带有特殊引号,如下所示微软Word。即使在 Mac 上,浏览器事实上也能够解释 ISO-559-1 中的这些代码。
像
new OutputStreamWriter(new FileOutputStream("..."), "Windows-1252")
这样的 Java 标准转换已经做了很多事情。您可以编写一种过滤器,或者查找引入的?
未翻译的特殊字符。您可以将 Windows-1252 中没有的带重音的拉丁字母翻译为 ASCII 字母:String s = ... s = Normalizer.normalize(s, Normalizer.Form.NFD); return s = s.replaceAll("\\p{InCombiningDiacriticalMarks}", "");
对于印地语或西里尔语等其他文字,要搜索的关键字是音译。
关于Java:关于字符集转换的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13347205/