2015-03-03 106 views
0

我在做一個簡單的程序。 有一個使用charset「utf-8」的網址。 我想從此頁面獲得完整源代碼, 但存在字符編碼問題。HttpURLConnection字符編碼

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.URL; 

class WholeTest { 

    HttpURLConnection conn; 


    public void openUrl() throws Exception { 

     URL pageUrl = new URL("http://naver.com"); 
     conn = (HttpURLConnection)pageUrl.openConnection(); 
     conn.setRequestMethod("GET"); 
     conn.setUseCaches(false); 

     conn.setRequestProperty("Host", "naver.com"); 
     conn.setRequestProperty("Connection", "keep-alive"); 
     conn.setRequestProperty("Cache-Control", "max-age=0"); 
     conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); 
     conn.setRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36"); 
     conn.setRequestProperty("Accept-Encoding", "gzip, deflate, sdch"); 
     conn.setRequestProperty("Accept-Language", "ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4"); 


     BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(),"utf-8")); 
     String inputLine; 
     StringBuffer response = new StringBuffer(); 

     while ((inputLine = in.readLine()) != null) { 
      response.append(inputLine); 
     } 
     in.close(); 

     System.out.println("---result---"); 
     System.out.println(response.toString()); 
    } 
} 


public class Whole { 

    public static void main(String args[]) throws Exception { 
     System.out.print("Test"); 

     WholeTest w = new WholeTest(); 
     w.openUrl(); 
    } 

} 

結果是: ?????????????????????????????????????? ???????????? 我無法查看源代碼。當我使用charset「utf-8」閱讀inputStream時,我做了什麼不正確的?我使用所有UTF-8,UTF-8,euc-kr,EUC-KR ... 相同的結果。

+0

試 「UTF-8」,而不是UTF-8 – Raghuveer 2015-03-03 08:57:37

+0

的HTML網頁被標記爲UTF-8,但它是韓國人。爲了通過system.out打印,試着指定韓文的正確字符集 'PrintStream out = new PrintStream(System.out,true,「EUC-KR」); out.println(response.toString());' – 2015-03-03 08:59:17

+0

@Raghuveer嗯...相同的結果。我不知道是什麼問題。另一個程序運行良好。 T.T – Juntae 2015-03-03 09:01:33

回答

2

正如我懷疑,評論或刪除下面的行。它會像魅力一樣工作。

conn.setRequestProperty("Accept-Encoding", "gzip, deflate, sdch"); 

你期待的gzip二進制當返回實際上是text/html

+0

噢...它工作正常!謝謝!你知道理由嗎? – Juntae 2015-03-03 09:06:39

+0

我已經在編輯中指定了原因。當返回實際上是text/html時,您希望使用gzip二進制格式 – shazin 2015-03-03 09:12:16