关于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[],然后再转为字符串。就可以解决问题了。

相关推荐