2016-10-17 65 views
1

我使用下面的代碼發佈一些數據,但我發現在某些服務器的響應字符串是亂碼(並非所有的服務器)。使用UrlConnection時某些服務器出現亂碼?

URL url = new URL("http://url"); 
    HttpURLConnection connection = (HttpURLConnection) url 
     .openConnection(); 
    connection.setDoOutput(true); 
    connection.setDoInput(true); 
    connection.setRequestMethod(method); 
    connection.setUseCaches(false); 
    connection.setInstanceFollowRedirects(true); 
    connection.setRequestProperty("Accept-Charset", String_UTF_8); 
    connection.setRequestProperty("contentType", String_UTF_8); 
    connection.connect(); 
    PrintWriter out = new PrintWriter(newOutputStreamWriter(connection.getOutputStream(),String_UTF_8)); 
    out.println(json); 
    out.close(); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), String_UTF_8)); 
    String lines; 
    while ((lines = reader.readLine()) != null) { 
     lines = new String(lines.getBytes()); 
     sb.append(lines); 
    } 
    reader.close(); 
    connection.disconnect(); 

我嘗試了很多方法,但都沒有效果。

+0

什麼是'String_UTF_8'?從你的代碼中刪除'lines = new String(lines.getBytes());''''''因爲你已經有'String'了,所以它是無用的。 –

+0

@ NicolasFilotto,刪除該行,並解決問題。您應該回答問題而不是評論。 –

回答

0

不要使用String#getBytes()它將使用平臺的默認字符集這意味着它是平臺相關解碼你的String。此外,因爲您已經使用UTF-8作爲字符集將您的流內容解碼爲String,所以它甚至是無用

試試這個:

try (BufferedReader reader = new BufferedReader(
    new InputStreamReader(connection.getInputStream(), String_UTF_8)) 
) { 
    String lines; 
    while ((lines = reader.readLine()) != null) { 
     sb.append(lines); 
    } 
} 
相關問題