【问题标题】:Java library for converting characters between different encodings用于在不同编码之间转换字符的 Java 库
【发布时间】:2018-04-29 23:56:09
【问题描述】:

我面临以下情况:

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

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

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

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

我需要一些可以的东西

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

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

【问题讨论】:

  • 小心您阅读的内容。这里的大多数答案都给了你绝对垃圾的建议,因为编写它们的人不了解字符编码是如何工作的(他们认为他们很不幸地这样做了)。您的主要问题是识别编码,其他一切都是小菜一碟。然而,识别编码并不一定容易,至少在您有很多不同选择的情况下是这样。
  • 也许这可以帮助你(是的,我不知道编码...)jchardet.sourceforge.net

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


【解决方案1】:

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

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

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

What is the most accurate encoding detector?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    相关资源
    最近更新 更多