在Java中将网页中的html正确加载到字符串中的最简单方法
正如标题所说。
帮助非常感谢!
一个非常常见的错误是无法将 HTTP 响应从字节正确转换为字符。为此,您必须知道响应的字符编码。希望将其指定为“内容类型”参数中的参数。但是把它放在正文中,作为标签中的“http-equiv”属性也是一种选择。meta
因此,将页面正确加载到页面中非常复杂,甚至像HttpClient这样的第三方库也没有提供通用解决方案。String
下面是一个简单的实现,它将处理最常见的情况:
URL url = new URL("http://stackoverflow.com/questions/1381617");
URLConnection con = url.openConnection();
Pattern p = Pattern.compile("text/html;\\s+charset=([^\\s]+)\\s*");
Matcher m = p.matcher(con.getContentType());
/* If Content-Type doesn't match this pre-conception, choose default and
* hope for the best. */
String charset = m.matches() ? m.group(1) : "ISO-8859-1";
Reader r = new InputStreamReader(con.getInputStream(), charset);
StringBuilder buf = new StringBuilder();
while (true) {
int ch = r.read();
if (ch < 0)
break;
buf.append((char) ch);
}
String str = buf.toString();
您仍然可以使用以下内容进行简化:org.apache.commons.io.IOUtils
URL url = new URL("http://stackoverflow.com/questions/1381617");
URLConnection con = url.openConnection();
Pattern p = Pattern.compile("text/html;\\s+charset=([^\\s]+)\\s*");
Matcher m = p.matcher(con.getContentType());
/* If Content-Type doesn't match this pre-conception, choose default and
* hope for the best. */
String charset = m.matches() ? m.group(1) : "ISO-8859-1";
String str = IOUtils.toString(con.getInputStream(), charset);