httpclient編碼問題(未完成)

poplarbbs發表於2008-10-17
最近在做一個httpClient模擬動態操作Web的功能。很正常的遇到了亂碼問題,開始沒有弄清楚亂碼的原因走了很多彎路。終於解決了,記錄備忘一下。

首先http響應的編碼有兩個部分,response頭裡的引數和頁面開頭的meta資訊。其實瀏覽器首先是針對response頭來設定頁面charset的。httpClient模擬頁面也是採用相同方式。所以其實亂碼跟meta無關。

我們知道String-GBK〉ByteArray-GBK〉String是正確的,但如果我們採用String-GBK〉ByteArray-ISO-8859-1〉String呢?結果就是各種各樣的亂碼。

所以當httpClient用iso-8859-1讀取response的時候已經轉換了編碼,很可能在這時已經亂碼了。此時如果用method.getResponseBodyAsString();獲取頁面資訊的時候再進行轉換已經很難還原了。

通常如果要轉換編碼的時候,我會使用:

String target = new String(orig.getBytes("ISO-8859-1"),"GBK");


解決辦法就是使用以下配置。

private static final String CONTENT_CHARSET = "GBK";// httpclient讀取內容時使用的字符集

HttpClient client = new HttpClient();
client.getParams().setParameter(
HttpMethodParams.HTTP_CONTENT_CHARSET, CONTENT_CHARSET);


其他資料:
http://hi.baidu.com/beyond456/blog/item/1798bfa1607d25884610646c.html
http://www.itpub.net/693874.html
http://www.ibm.com/developerworks/cn/opensource/os-httpclient/
http://read.newbooks.com.cn/info/52828.html

相關文章