如何在页面编码中读取带有 HTML 页面的 HTTP 流?
这是我用来获取 HTTP 流的代码片段。InputStreamReader有 encoding 可选参数,但我不知道如何获取它。
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
BufferedReader d = new BufferedReader(new InputStreamReader(is));
如何在页面编码中读取带有 HTML 页面的 HTTP 流?
这是我用来获取 HTTP 流的代码片段。InputStreamReader有 encoding 可选参数,但我不知道如何获取它。
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
BufferedReader d = new BufferedReader(new InputStreamReader(is));
检索网页是一个相当复杂的过程。这就是存在诸如HttpClient之类的库的原因。我的建议是,除非您有真正令人信服的理由,否则请使用 HttpClient。
当连接通过
URLConnection conn = url.openConnection();
您可以通过 url.getContentEncoding() 获取编码方法名称,因此将此字符串传递给 InputStreamReader(),这样代码看起来像
BufferedReader d = new BufferedReader(new InputStreamReader(is,url.getContentEncoding()));
简短的回答是URLConnection.getContentEncoding()。正确的答案是 cletus 建议的,除非您有令人信服的理由不这样做,否则请使用适当的第三方库。
我最近有一个非常相似的问题要解决。像其他答案一样,我也开始使用 HttpClient 等。但是,这些库要求您预先知道要下载的文件的编码。否则,检索到的 HTML 文件的转换将产生不可读的字符。
这种方法行不通,因为 HTML 文件的编码仅在 HTML 文件本身中指定。根据 HTML 版本,编码以多种不同方式指定,例如 XML 标头、两个不同的 head 元标记元素等。如果您遵循这种方法,您需要:
特别是为正确的编码字符串解析 HTML 内容很容易出错。相反,我建议您依赖JSoup 之类的库,它会为您完成这项工作。因此,不要通过 httpclient 下载文件,而是使用 JSoup 为您检索文件。此外,JSoup 提供了一个很好的 API 来直接访问 HTML 页面的不同部分(例如页面标题)。