httpclient傳回值中文亂碼問題解決方案
來源:互聯網
上載者:User
原文地址:http://blog.sina.com.cn/s/blog_a1b205bb0101aer6.html
前幾天,在抓取某網站的資訊時(http://www.99sj.com/Price/Price/Default.aspx),第一次碰到了這種應用下的亂碼問題。於是上網查了一下,提供的解決辦法大致有兩種:
1> private static final String CONTENT_CHARSET = "GBK";
httpClient.getParams().setContentCharset("UTF-8");
or
httpClient.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, CONTENT_CHARSET);
2> private static final String CONTENTTYPE = " text/html; charset=GBK";
getMethod.setRequestHeader("Content-Type", CONTENTTYPE);
測試了,沒有任何效果(換成UTF-8也不行)。也用了String result = new String(pageSrc.getBytes("UTF-8"),"GBK"),依然無效。
在焦頭爛額時想到了以前在學校時經常用的一句話:找問題要會追根溯源。仔細想想,字串裡面的常值內容也是通過檔案流擷取的,既然轉換字串字元編碼不起作用,那可以設定檔案流的預設編碼嗎。查了jdk,是可行的。
private static final String CHARSET = "UTF-8";
InputStream ins = getMethod.getResponseBodyAsStream();
//按指定的字元集構建檔案流
BufferedReader br = new BufferedReader(new InputStreamReader(ins,CHARSET));
StringBuffer sbf = new StringBuffer();
String line = null;
while ((line = br.readLine()) != null)
{
sbf.append(line);
}
br.close();
問題解決,^_^。這裡的CHARSET要根據實際情況設定