Java 用于在不同编码之间转换字符的库

Java library for converting characters between different encodings

我面临以下情况:

我们从外部来源轮询一些 csv 数据。源的响应 headers 没有指定哪个是字符集,并且数据包含一些德语字符,这些字符在 rombus 中显示为问号(我知道这意味着该字符未在 UTF-8 中定义) .

我们想对这些数据做一些处理,然后转发它,但为了解决这个问题,我们还想将错误字符编码为正确的格式以正确显示它们。

我已经在这里阅读了一些答案,其中大部分建议使用 "string.getBytes("encoding")" 方法,然后使用其他编码从中创建一个新字符串。

但据我所知,我需要不同的东西,因为这种方法只是解码字符并处理与另一种编码相关的相同字节,并且一些字符在 utf-8 中以不同的字节长度表示,例如ISO-8859-1(我相信我们正在轮询的数据确实被编码)会导致结果字符串中出现奇怪的字符,所以这不是我们真正想要实现的。

我需要一些可以

  1. 从源编码中的字节表示中获取字符
  2. 从目标编码中的字节表示中获取字符
  3. 迭代解码后的字节数组并将所有字符字节表示替换为来自目标编码的表示

在此之后,可以安全地从具有目标编码的字节数组创建一个新字符串。 那么,如果有人知道一个好的图书馆可以做到这一点?如果它已经存在,我不想自己实现它。

您有字节、二进制数据,表示某些字符集中的文本。为此,您需要 字符集检测 。了解字符集后,您可以将其加载到 java 字符串 (Unicode) 中,并根据您想要的任何字符集将其保存为字节。

如果该目标字符集不能表示 Unicode 符号(代码点),那么甚至可以确定如何处理它。参见 CharsetDecoder/CharsetEncoder。

对于字符集检测,存在一些库。我为部分字符集和语言编写了自己的。它与语言检测结合使用效果最佳。例如捷克语。

What is the most accurate encoding detector?