关于httpClient的个别字符乱码
关于httpClient的个别字符乱码
近期在做抓取的工作,登录到别人的网站上获取页面的信息,解析之后封装成自己的东西。
遇到一个问题,httpclient的post方法实现的连接网页,后来解析时有一个字出现了乱码。先附上我的代码:
publicStringgetCourse(StringsessionId)throwsClientProtocolException,
IOException{
HttpClientclient=newDefaultHttpClient();
Stringurl="http://218.195.96.24/Jwmis/znpk/Pri_StuSel_rpt.aspx";
HttpPostpost1=newHttpPost(url);
Stringyear="";
List<NameValuePair>params=Lists.newArrayList();
intcurrentYear=DateUtil.getYear();
intcurrentMonth=DateUtil.getMonth();
if(currentMonth<9){
year=(currentYear-1)+"1";
}else{
year=currentYear+"0";
}
//Stringyear=CrawlerConfigUtil.SHANXILIGONG_YEAR;//
//陕西理工的课表查询年份写在配置文件
params.add(newBasicNameValuePair("Sel_XNXQ",year));//年份
params.add(newBasicNameValuePair("px","1"));
params.add(newBasicNameValuePair("rad","1"));
params.add(newBasicNameValuePair("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;IntelMacOSX10.9;rv:24.0)Gecko/20100101Firefox/24.0");
//设置请求的编码为utf-8
client.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,"utf-8");
//设置请求中传递参数的编码
post1.setEntity(newUrlEncodedFormEntity(params,"gb2312"));
HttpResponseresponse1=client.execute(post1);
HttpEntityentity1=response1.getEntity();
//设置响应的编码为gbk
Stringresult1=EntityUtilsl.toString(entity1,"GBK");
returnresult1;
}
这里返回的result1,不管怎么去设置请求编码,请求参数编码,还有响应的编码,都有个别字符编码的问题。最终找到一种解决方案,分享出来给大家,希望对需要的人有帮助。
将
//设置响应的编码为gbk
Stringresult1=EntityUtilsl.toString(entity1,"GBK");
更改为:byte[]bytearray=EntityUtils.toByteArray(entity1);
Stringresult1=newString(bytearray,"gbk");
就是说先将其转为byte[],然后再转为字符串。就可以解决问题了。