如何检测网页的字符集

时间:2011-12-26 13:29:53

标签: java encoding character-encoding webpage

我只想用java语言获取网页源代码,我只想用正确的编码类型获取该内容。到目前为止,我能够获得网页的内容。但对于某些网页而言,内容会带有荒谬的字符。所以我需要检测该网页的字符集。

根据我的小研究,我发现有一个jChardet库可以做到这一点。但我无法将其导入我的项目。有人可以帮助我吗?

顺便说一句,下面的代码是阅读网页内容的代码

  StringBuilder builder = new StringBuilder(); 
  InputStream is = fURL.openStream();
  BufferedReader buffer = null;
  buffer = new BufferedReader(new InputStreamReader(is, encodingType));

  int byteRead;
  while ((byteRead = buffer.read()) != -1) {
    builder.append((char) byteRead);
  }
  buffer.close();  

  return builder;

3 个答案:

答案 0 :(得分:4)

阅读HTTP响应的Content-Type标头,这是获取字符集的最佳方式。只有在没有其他选择时才应用猜测 - 你这样做。

答案 1 :(得分:1)

您也可以使用http://jchardet.sourceforge.net/

private static String detectCharset(byte[] body) {
        nsDetector det = new nsDetector(nsPSMDetector.ALL);



        det.Init(new nsICharsetDetectionObserver() {

            public void Notify(String charset) {
                HtmlCharsetDetector.found = true;
            }
        });

        boolean done = false;
        boolean isAscii = true;

        if (isAscii) {
            isAscii = det.isAscii(body, body.length);
        }

        // DoIt if non-ascii and not done yet.
        if (!isAscii && !done) {
            done = det.DoIt(body, body.length, false);
        }

        return det.getProbableCharsets()[0];

    }

答案 2 :(得分:0)

最低限度,您需要读取并解析HTTP标头,以查看它们是否在HTTP标头中声明编码,并且在没有此类声明(相当常见)的情况下,解析文档本身以查找{{1} }标记声明编码。对于XHTML文档,您需要检查XML声明并默认为utf-8。这仍然会留下大量具有未声明编码的页面,因此需要一些启发式方法。您可以检查HTML5草案中的section on encodings,其中也包含一些启发式覆盖(例如,将iso-8859-1视为windows-1252)。