`

关于httpClient的个别字符乱码

阅读更多

关于httpClient的个别字符乱码

近期在做抓取的工作,登录到别人的网站上获取页面的信息,解析之后封装成自己的东西。

遇到一个问题,httpclient的post方法实现的连接网页,后来解析时有一个字出现了乱码。先附上我的代码:


public String getCourse(String sessionId) throws ClientProtocolException,
IOException {
HttpClient client = new DefaultHttpClient();
String url = "http://218.195.96.24/Jwmis/znpk/Pri_StuSel_rpt.aspx";

HttpPost post1 = new HttpPost(url);
String year = "";
List<NameValuePair> params = Lists.newArrayList();

int currentYear = DateUtil.getYear();
int currentMonth = DateUtil.getMonth();

if (currentMonth < 9) {
year = (currentYear - 1) + "1";
} else {
year = currentYear + "0";
}

// String year = CrawlerConfigUtil.SHANXILIGONG_YEAR;//
// 陕西理工的课表查询年份写在配置文件
params.add(new BasicNameValuePair("Sel_XNXQ", year));// 年份
params.add(new BasicNameValuePair("px", "1"));
params.add(new BasicNameValuePair("rad", "1"));
params.add(new BasicNameValuePair("Submit01", "检索"));
post1.setHeader("Content-Type", "application/x-www-form-urlencoded");

post1.setHeader("Cookie", "ASP.NET_SessionId=" + sessionId);
post1.setHeader(
"User-Agent",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:24.0) Gecko/20100101 Firefox/24.0");


//设置请求的编码为utf-8
client.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "utf-8");

//设置请求中传递参数的编码
post1.setEntity(new UrlEncodedFormEntity(params,"gb2312"));



HttpResponse response1 = client.execute(post1);

HttpEntity entity1 = response1.getEntity();

//设置响应的编码为gbk
String result1 = EntityUtilsl.toString(entity1,"GBK");



return result1;
}




这里返回的result1,不管怎么去设置请求编码,请求参数编码,还有响应的编码,都有个别字符编码的问题。最终找到一种解决方案,分享出来给大家,希望对需要的人有帮助。




//设置响应的编码为gbk
String result1 = EntityUtilsl.toString(entity1,"GBK");


更改为:byte[] bytearray = EntityUtils.toByteArray(entity1);
String result1 = new String(bytearray, "gbk");

就是说先将其转为byte[],然后再转为字符串。就可以解决问题了。










分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics