2015-07-10 90 views
0

爲什麼這個輸入流沒有返回正確的字符? Código使用UTF-8InputStream特殊字符UTF-8

HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setReadTimeout(10000 /* milliseconds */); 
     conn.setConnectTimeout(15000 /* milliseconds */); 
     conn.setRequestMethod("GET"); 
     conn.setDoInput(true); 
     conn.setRequestProperty("Accept-Charset", "UTF-8"); 

     // Starts the query 
     conn.connect(); 
     InputStream stream = conn.getInputStream(); 

     byte[] buffer = new byte[1024]; 
     int bytesRead = stream.read(buffer); 
     String page = new String(buffer, 0, bytesRead, "UTF-8"); 



     //Page is returning, C�digo instead of Código 
+0

我用一個encodingfilter(Spring)解決了類似的問題。 –

+1

大概是因爲服務器忽略了你的「接收字符集」的偏好,並在不同的編碼發送的消息。 – wero

+1

爲了說明這一點,你必須看看響應的'內容Type'頭知道實際上正在使用哪個字符集。再看'conn.getHeaderFieldKey()'和'conn.getHeaderField()'方法來發現標頭值,則提取其'charset'屬性(或者如果不存在默認它),並使用流數據轉換成字符串時。 –

回答

1

試試這個變成Cdigo即使在讀取後,

BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), StandardCharsets.UTF_8)); 
+0

我需要API至少16,和標準要求19 =( – user2582318

0

的解決辦法是:

//set the conn to this 
      conn.setRequestProperty("Accept-Charset", "ISO-8859-1"); 

//use Apache Commons IO 
      data = IOUtils.toString(stream, "ISO-8859-1"); 

,並在PHP頁面放:

<html> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"> 

</head> 
...