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

时间:2017-11-16 12:32:44

标签: java encoding utf-8 character-encoding iso-8859-1

我面临以下情况:

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

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

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

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

我需要一些可以

的东西
  1. 从源编码
  2. 中的字节表示中获取字符
  3. 从目标编码中的字节表示中获取字符
  4. 迭代解码的字节数组,并用目标编码
  5. 中的表示替换所有字符字节表示

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

1 个答案:

答案 0 :(得分:0)

您有字节,二进制数据,表示某些字符集中的文本。为此,您需要字符集检测。知道Charset,你可以用java String(Unicode)加载它,并将它保存为给定任何Charset所需的字节。

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

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

请参阅What is the most accurate encoding detector?