前一阵抓网页遇到编码问题,于是写了个方法在每次抓取之前确认一下网页的编码,代码如下:
private static String getEncode(String strUrl){
String encode = HttpClient.encode;
InputStream in = null;
HttpURLConnection con = null;
try{
log.debug("检查url编码:" + strUrl);
URL url = new URL(strUrl);
con = (HttpURLConnection)url.openConnection();
// String[] s = strurl.split("/");
System.out.printf("编码:%s \n" ,con.getContentEncoding());
if(con.getContentEncoding()!=null){
return con.getContentEncoding();
}
in = con.getInputStream();
con.setConnectTimeout(5*1000);
con.setReadTimeout(10*1000);
BufferedReader read = new BufferedReader(new InputStreamReader(in));
String inStr = null;
String reg = "meta http-equiv=\"Content-Type\" content=\".*?charset=(.*?)\"";
Pattern p = Pattern.compile(reg);
while ((inStr = read.readLine()) != null) {
Matcher m = p.matcher(inStr);
if(m.find()){
encode = m.group(1);
log.debug("code:" + encode);
break;
}
}
}catch(Exception e){
log.error(e.getMessage(),e);
}finally{
try {
in.close();
con.disconnect();
} catch (Exception e) {
}
}
return encode;
}
分享到:
相关推荐
reqUrl是请求的URL,parameters是参数映射表,recvEncoding是响应的编码方式。 在doGet方法中,首先将参数映射表转换为字符串,并将其追加到reqUrl后面。然后,使用HttpURLConnection类发送GET请求,并读取服务器的...
然后,我们使用 URLEncoder 对参数进行编码,避免了编码问题。最后,我们使用 HttpURLConnection 对象发送 GET 请求,并将响应内容存储在 responseContent 变量中。 在 doPost() 方法中,我们使用 ...
在上面的示例中,我们通过`openConnection()`方法创建了一个`URLConnection`实例,并设置了`Accept-Charset`请求头,以指定客户端期望接收的数据编码方式。如果无需发送参数或请求头,则可以简化为`new URL(url)....
相比Socket,URLConnection更易于使用,因为它自动处理HTTP协议的细节,如编码、重定向和缓存策略。当需要上传或下载文件时,可以设置OutputStream和InputStream来读写数据,例如使用`setDoOutput(true)`开启写入...
以下是对Java URLConnection的详细总结: 1. **请求类别**: - **GET**:最常见的HTTP请求方法,用于获取服务器上的资源。参数通常附加在URL后面,适合请求静态内容,且易于缓存。 - **POST**:与GET相反,POST...
在这个例子中,`URLEncoder.encode()`用于将参数编码为URL安全的格式,而`setRequestProperty()`设置`Accept-Charset`头来告知服务器数据的编码方式。 三、发送带参数的POST请求 POST请求常用于向服务器提交数据,...
* 在读取响应数据时,需要注意响应的编码方式,避免乱码问题。 示例代码 ------------ 以下是一个使用 URLConnection 进行网络编程的示例代码: ```java import java.io.IOException; import java.io.InputStream...
4. **URL编码**:对于GET请求,URL中的参数可能需要进行URL编码,防止特殊字符引起解析问题。使用`URLEncoder.encode()`方法: ```java String encodedParam = URLEncoder.encode("中文参数", "UTF-8"); String ...
在实际开发中,可能有现成的库或工具(如Apache Commons IO)可以帮助处理编码问题,简化代码。 8. **博文链接**: 博文链接提供了更详细的背景和可能的解决方案,读者可以参考以获取更全面的信息。 总结来说,Java...
本实例将详细讲解如何使用`URLConnection`来发送POST或GET请求。 1. **初始化请求数据** 首先,我们需要准备请求的数据。在给定的代码示例中,数据被存储在一个`Map, String>`中,其中键是参数名,值是参数值。...
针对文件读写产生的乱码,Java提供了FileReader、FileWriter类,它们默认使用平台的默认编码,这可能导致跨平台问题。为了避免这种情况,我们应当使用InputStreamReader和OutputStreamWriter,指定明确的编码,如`...
在Java编程中,读取远程网页内容是一项常见的任务,但可能会遇到编码问题导致乱码。本文将深入探讨这个问题,提供有效的解决方案,确保正确地读取和处理远程网页的字符编码。 首先,理解网页编码至关重要。网页通常...
Base64是一种编码方式,能够将二进制数据转化为可打印的ASCII字符,方便在网络上传输。 首先,我们需要了解Java中的网络I/O操作。在Java中,`java.net.URL`类是用于表示统一资源定位符的,它可以用来打开到网络资源...
总结来说,这个例子旨在帮助开发者了解如何在Android环境中使用HttpClient和URLConnection获取远程网页的HTML源代码,同时展示了在GBK编码环境下的处理方式。对于初学者来说,这是一个很好的起点,可以帮助他们理解...
为了实现这些功能,开发者可能使用了Java的网络编程API(如Socket和URLConnection)来处理与服务器的通信,Servlet或JSP在服务器端处理请求,以及SQL来操作数据库。布局管理器(如FlowLayout、BorderLayout或...
在读取时,需要确保正确设置字符编码,以避免乱码问题。这通常可以通过设置URLConnection的`setEncoding()`方法实现。 6. **多线程**: 由于网络操作可能会阻塞主线程,导致GUI无响应,所以通常会将网络请求放入单独...
HttpURLConnection都提供了解决这些问题的方法,例如通过`setInstanceFollowRedirects(boolean)`控制自动重定向,或者使用`SSLSocketFactory`和`TrustManager`处理安全连接。 总的来说,HttpURLConnection是Java中...