每隔個幾年就要被問一次,還是寫下來當 memo 好了
起因在於某個
public void UrlConnEnc(){
String chinese_str = "中文字串";
String url_str;
BufferedReader br = null;
try {
String big5_chinese_str = URLEncoder.encode(chinese_str, "big5");
url_str = "http://aaa.bbb.ccc/?p=" + big5_chinese_str ;
URL url = .URL(url_str);
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("11.22.33.44", 8080));
URLConnection uc = url.openConnection(proxy);
uc.setRequestProperty("User-agent", "IE/6.0");
br = new BufferedReader(
new InputStreamReader(uc.getInputStream())
);
String line;
while ((line = br.readLine())!=null) {
System.out.println(line);
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
} finally {
try {
if (br != null) { br.close(); br = null;}
} catch (Exception e){
e.printStackTrace();
}
}
}
Note:
- 專案編碼為 UTF8
- 編碼轉換是用偷吃步 : 透過 URLEncoder 這個類別達成
- 因為內部出去要走 proxy ,所以程式中必須加上 proxy 設定,用不到的就拿掉
- User-agent 這個 Request Property 不是必要的,但另一個維運單位總是自以為在squid檔設個Header沒有Browser info 的條件就可以檔掉來Try的程式,為了避免被檔掉,還是偽裝一下好了
- 萬一萬一 Response 的編碼編碼不同呢 ? 把InputStreamReader的傳入參數再加一個編碼就好了
new InputStreamReader(conn.getInputStream(), encoding)
- 最後.....
我絕對不會跟你們說這個
TL, 嗯, 心有戚戚焉...
回覆刪除不想白嫖 只好簽到了 ...
回覆刪除