我一直致力于实现以下功能的方案:
我的问题是,我一直在努力寻找有关ISO-8559的信息。有人碰巧知道更多吗?这个与ISO-8859有何不同?任何细节都会有所帮助。
其次,不考虑ISO-8559要求,我继续编写程序,将传入数据转换为Java中的ISO-8859。虽然我能够使用基于字符的替换来实现所需的功能,但是当数据量很大时,这显然是非常耗时的。 [以MB为单位]
我相信必须有更好的方法来做到这一点。有人可以告诉我吗?
答案 0 :(得分:2)
我假设您要将UTF-8转换为ISO-8859 -1 ,即Western Latin-1。网络中有许多字符集表。
一般情况下,对于网络浏览器和Windows,最好转换为 Windows-1252 ,这是一个重新定义范围0x80 - 0xBF的扩展,更多的是特殊引号,如下所示MS 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}", "");
对于其他类似印地语或西里尔语的脚本,要搜索的关键字是音译。