【问题标题】:How to retrieve HTML page in proper encoding using Java?如何使用 Java 以正确的编码检索 HTML 页面?
【发布时间】:2009-08-10 15:57:46
【问题描述】:

如何在页面编码中读取带有 HTML 页面的 HTTP 流?

这是我用来获取 HTTP 流的代码片段。 InputStreamReader 有 encoding 可选参数,但我不知道如何获取它。

URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
BufferedReader d = new BufferedReader(new InputStreamReader(is));

【问题讨论】:

    标签: java html http web-scraping


    【解决方案1】:

    检索网页是一个相当复杂的过程。这就是存在诸如HttpClient 之类的库的原因。我的建议是,除非您有真正令人信服的理由,否则请使用 HttpClient。

    【讨论】:

    【解决方案2】:

    当连接建立时

    URLConnection conn = url.openConnection();

    您可以通过 url.getContentEncoding() 获取编码方法名称,因此将此字符串传递给 InputStreamReader(),以便代码如下所示

    BufferedReader d = new BufferedReader(new InputStreamReader(is,url.getContentEncoding()));

    【讨论】:

    【解决方案3】:

    简短的回答是URLConnection.getContentEncoding()。正确的答案是 cletus 建议的,除非您有令人信服的理由不这样做,否则请使用适当的第三方库。

    【讨论】:

    • 没有自我满足感,除非代码是由我们赢得的手中编写的,而不是寻求第三方。
    【解决方案4】:

    我最近有一个非常相似的问题要解决。像其他答案一样,我也开始使用 HttpClient 等。但是,这些库要求您预先知道要下载的文件的编码。否则,检索到的 HTML 文件的转换将产生不可读的字符。

    这种方法行不通,因为 HTML 文件的编码仅在 HTML 文件本身中指定。根据 HTML 版本,编码以多种不同方式指定,例如 XML 标头、两个不同的 head 元标记元素等。如果您采用这种方法,您需要:

    1. 下载文件并查看内容,通过解析 HTML 内容找出编码。
    2. 再次下载文件以指定正确的编码。

    特别是为正确的编码字符串解析 HTML 内容很容易出错。相反,我建议您依赖像 JSoup 这样的库,它会为您完成这项工作。因此,不要通过 httpclient 下载文件,而是使用 JSoup 为您检索文件。此外,JSoup 提供了一个很好的 API 来直接访问 HTML 页面的不同部分(例如页面标题)。

    【讨论】:

      猜你喜欢
      • 2011-12-28
      • 1970-01-01
      • 2012-08-18
      • 2015-07-01
      • 2019-06-21
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      • 1970-01-01
      相关资源
      最近更新 更多