【问题标题】:how can I detect charset of a web page如何检测网页的字符集
【发布时间】:2012-01-28 00:05:04
【问题描述】:

我只想获取 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;

【问题讨论】:

    标签: java encoding character-encoding webpage


    【解决方案1】:

    阅读 HTTP 响应的 Content-Type 标头,这是获取字符集的最佳方式。只有在别无选择时才应用猜测 - 你可以。

    【讨论】:

      【解决方案2】:

      你也可以使用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];
      
          }
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2012-04-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-23
          • 2018-05-29
          相关资源
          最近更新 更多