我可以给jsoup一个后备字符编码,以便在找不到元标记时使用吗?

时间:2016-04-04 20:20:02

标签: html character-encoding jsoup

我正在使用Jsoup来解析具有未知字符编码的HTML文件。我使用null字符集调用Jsoup.parse并让Jsoup自动检测。有些文件有meta个标签,Jsoup选择很好。

但是我的某些文件没有meta个标签,并使用了不是UTF-8的各种编码。对于这些情况,Jsoup回落到UTF-8,导致一些破碎的字符。

我发现juniversalchardet库能够正确地自动检测这些情况。例如,它在几个示例中正确检测到WINDOWS-1252编码。

理想情况下,我想使用meta标记(如果存在)。如果他们没有回到juniversalchardet报告的内容(不只是猜测UTF-8)。

  1. 我可以为Jsoup提供一个后备字符集,仅在无法找到元标记的情况下使用吗?
  2. 或者,我可以从Jsoup获取有关是否必须猜测编码的信息吗?如果它报告它已经猜到了那么我可以调用juniversalchardet然后使用传递给Jsoup的显式编码进行重新分析。
  3. 我已经查看了Jsoup的源代码,从v1.8.3开始,似乎从meta标签中检测字符集的代码没有被分解到单独的方法中(查找{{1的源代码) })。此外,关于是否猜到的信息似乎不会出现在最终文档中。

    有没有更好的方法来实现我的目标?是否存在用于检测已经可以使用html元标记的文件的字符编码的库(如果它们存在的话),我可以完全使用它来代替jsoup的自动检测?

1 个答案:

答案 0 :(得分:0)

我决定使用Apache Tika。它有一个HtmlEncodingDetector类来查找HTML meta标记。当由于不存在元标记而失败时,我会回到Tika的UniversalEncodingDetector。 (后者是juniversalchardet的包装器。我使用包装器而不是直接调用juniversalchardet,因为两个探测器都有相同的Java接口,这很方便。)

我现在实际上从未使用过Jsoup的自动检测。

唯一需要注意的是,Tika是一个相当大的项目,并且添加了很多不相关的依赖项。