如何使用页面编码中的 HTML 页面读取 HTTP 流?

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

URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
BufferedReader d = new BufferedReader(new InputStreamReader(is));
有帮助吗?

解决方案

检索网页是一个相当复杂的过程。这就是为什么存在库,如 HttpClient的。我的建议是,除非你有一个非常令人信服的理由,否则,使用HttpClient的。

其他提示

当连接被establised通

的URLConnection康恩= url.openConnection();

可以得到通url.getContentEncoding(编码方法名称),以便通过这个字符串的InputStreamReader(),使代码看起来像

的BufferedReader d =新的BufferedReader(新的InputStreamReader(是,url.getContentEncoding()));

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top