我正在使用Jsoup来解析具有未知字符编码的HTML文件。我使用null字符集调用Jsoup.parse
并让Jsoup自动检测。有些文件有meta
个标签,Jsoup选择很好。
但是我的某些文件没有meta
个标签,并使用了不是UTF-8
的各种编码。对于这些情况,Jsoup回落到UTF-8
,导致一些破碎的字符。
我发现juniversalchardet库能够正确地自动检测这些情况。例如,它在几个示例中正确检测到WINDOWS-1252
编码。
理想情况下,我想使用meta
标记(如果存在)。如果他们没有回到juniversalchardet报告的内容(不只是猜测UTF-8
)。
我已经查看了Jsoup的源代码,从v1.8.3开始,似乎从meta
标签中检测字符集的代码没有被分解到单独的方法中(查找{{1的源代码) })。此外,关于是否猜到的信息似乎不会出现在最终文档中。
有没有更好的方法来实现我的目标?是否存在用于检测已经可以使用html元标记的文件的字符编码的库(如果它们存在的话),我可以完全使用它来代替jsoup的自动检测?
答案 0 :(得分:0)
我决定使用Apache Tika。它有一个HtmlEncodingDetector
类来查找HTML meta
标记。当由于不存在元标记而失败时,我会回到Tika的UniversalEncodingDetector
。 (后者是juniversalchardet的包装器。我使用包装器而不是直接调用juniversalchardet,因为两个探测器都有相同的Java接口,这很方便。)
我现在实际上从未使用过Jsoup的自动检测。
唯一需要注意的是,Tika是一个相当大的项目,并且添加了很多不相关的依赖项。