Java 一个页面上有两个字符集标签,该使用哪一个?

Java 一个页面上有两个字符集标签,该使用哪一个?,java,html,parsing,groovy,web-crawler,Java,Html,Parsing,Groovy,Web Crawler,我正在抓取页面以获取信息,在Groovy中解析页面时遇到了很多问题。我使用juniversal chardet制作了一个半解决方案,它在大多数情况下都有效,只需扫描页面的头部标记,但有时在一个页面上会发现其中两个标记,例如: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ... <meta http-equiv="Content-Type" content="text/html; ch

我正在抓取页面以获取信息,在Groovy中解析页面时遇到了很多问题。我使用juniversal chardet制作了一个半解决方案,它在大多数情况下都有效,只需扫描页面的头部标记,但有时在一个页面上会发现其中两个标记,例如:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
...
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

...

是否有使用哪一个的标准(第一个、最后一个、两个?)或更简单的方法?谢谢。

HTML规范未定义此行为。同一文档中不能有两个单独的内容类型标记。由于您可能无论如何都必须解析此文档,因此最好是对开发人员的意图进行有根据的猜测。

我会试探性地这样做:

  • 一切都是ASCII码吗?如果是这样的话,你用哪一个并不重要
  • 它是否符合有效的UTF-8?如果是的话,我会用这个
  • 否则,请使用ISO-8859-1
您可能还需要查看从web服务器返回的内容类型标头

从根本上说,该页面已被破坏,但上述内容应给出合理的“最佳猜测”