Java:关于字符集转换的建议

标签 java character-encoding data-conversion

我一直在研究一个执行以下操作的场景:

  1. 获取Unicode格式的输入数据; [UTF-8]
  2. 转换为 ISO-8559;
  3. 检测并替换不支持的编码字符; [基于用户定义的键值对]

我的问题是,我一直在尝试深入查找有关 ISO-8559 的信息,但还没有成功。有没有人对这件事了解更多?这与 ISO-8859 有什么不同?任何细节都会很有帮助。

其次,将 ISO-8559 要求放在一边,我继续编写程序,用 Java 将传入数据转换为 ISO-8859。虽然我能够使用基于字符的替换来实现所需的目的,但当数据量很大时,它显然似乎很耗时。 [以 MB 为单位]

我确信一定有更好的方法来做到这一点。有人可以给我建议吗?

最佳答案

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

  1. 一般来说,对于网络浏览器和 Windows,最好转换为 Windows-1252,这是一个重新定义范围 0x80 - 0xBF 的扩展,下面带有特殊引号,如下所示微软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. 对于印地语或西里尔语等其他文字,要搜索的关键字是音译

关于Java:关于字符集转换的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13347205/

相关文章:

java - 我应该为什么组件添加 KeyListener?

java - 执行频率代码分析

python - help() 与 unicode __author__ 字符串

java - 翻转字符串中的位

java - Apache HttpComponents。获取 CONNECT 请求的响应

java - 即时运行不起作用

perl - 如何检测和报告对于使用 Perl 进行交换不合法的 Unicode 代码点?

C++ 字符编码 UTF-8

r - 将表示不同格式日期的字符串列转换为日期列

r - R中的Shapefile到光栅转换?