Java:关于Charset转换的建议

时间:2012-11-12 16:11:20

标签: java character-encoding data-conversion

我一直致力于实现以下功能的方案:

  1. 以Unicode格式获取输入数据; [UTF-8]
  2. 转换为ISO-8559;
  3. 检测&替换不支持的字符进行编码; [基于用户定义的键值对]
  4. 我的问题是,我一直在努力寻找有关ISO-8559的信息。有人碰巧知道更多吗?这个与ISO-8859有何不同?任何细节都会有所帮助。

    其次,不考虑ISO-8559要求,我继续编写程序,将传入数据转换为Java中的ISO-8859。虽然我能够使用基于字符的替换来实现所需的功能,但是当数据量很大时,这显然是非常耗时的。 [以MB为单位]

    我相信必须有更好的方法来做到这一点。有人可以告诉我吗?

1 个答案:

答案 0 :(得分:2)

我假设您要将UTF-8转换为ISO-8859 -1 ,即Western Latin-1。网络中有许多字符集表。

  1. 一般情况下,对于网络浏览器和Windows,最好转换为 Windows-1252 ,这是一个重新定义范围0x80 - 0xBF的扩展,更多的是特殊引号,如下所示MS Word。即使在Mac上,浏览器也能够在ISO-559-1中解释这些代码。

  2. 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}", "");
    
  3. 对于其他类似印地语或西里尔语的脚本,要搜索的关键字是音译