3

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

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

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

4 回答 4

4

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

于 2009-08-10T16:01:56.797 回答
3

当连接通过

URLConnection conn = url.openConnection();

您可以通过 url.getContentEncoding() 获取编码方法名称,因此将此字符串传递给 InputStreamReader(),这样代码看起来像

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

于 2009-08-10T16:14:16.930 回答
1

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

于 2009-08-10T16:23:21.980 回答
0

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

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

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

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

于 2013-02-12T21:34:03.853 回答