2014-11-17 37 views
1

當我向服務器請求(GET)內容時,我可以得到如下響應: K ??服務器響應中的特殊字符問題

但實際內容是:KOE

爲了解決這個問題,我想在保存和讀取文件時的內容,如下面使用UTF-8格式:

//屏保內容

OutputStreamWriter sout = new OutputStreamWriter (new FileOutputStream(new File(path)),Charset.forName("UTF-8")); 

    BufferedWriter buff_out= new BufferedWriter(sout); 

    int line = 0; 
    while((line = buff_in.read()) != -1) 
      buff_out.write(line); 

//讀取內容

InputStream inputStreamRead = new FileInputStream(path); 
    StringBuilder stringBuilder = null; 

    InputStreamReader inputStreamReader = new InputStreamReader(inputStreamRead, Charset.forName("UTF-8")); 
    BufferedReader buffReader= new BufferedReader(inputStreamReader); 

    String line; 
    stringBuilder = new StringBuilder(); 
    try 
    { 
     while ((line = buffReader.readLine()) != null) 
     { 
      stringBuilder.append(line); 
      stringBuilder.append('\n'); 
     } 
     Log.d("Main", "Test:: "+stringBuilder.toString()); 
    } 

隨着上述邏輯的幫助下,我不是爲了讓實際內容成爲KòÉ。

我也嘗試讀取字節。任何人都可以幫我解決這個問題。

在此先感謝。

回答

0

您的代碼工作正常,假設close()被正確調用。 有人可能會使用try-與資源:

try (BufferedWriter buff_out = new BufferedWriter(new OutputStreamWriter(
     new FileOutputStream(new File(path)), StandardCharsets.UTF_8))) { 
    ... 
} // Automatic close 

你也可以使用:

String path = ... 
byte[] content = Files.readAllBytes(Paths.get(path)); 
String s = new String(content, StandardCharsets.UTF_8); 

使用StandardCharsets常量,提供標準字符集下在JavaSE中的分佈意味着你不需要處理的UnsupportedEncodingException(UTF-8始終可用)。

錯誤源自其他來源。控制檯(IDE或操作系統命令行)可能使用平臺編碼,並且可能無法轉換這些Unicode字符。

使用功能強大的程序員編輯器編輯文件,如免費的NotePad ++(Windows)或JEdit。 他們可以處理編碼。

你也可以做一個字節轉儲檢查顯示?是否確實是字符串中問號:

System.out.println(Arrays.toString(string.getBytes(StandardCharsets.UTF_8))); 
System.out.println(string.contains("?")); 

未顯示的服務器通信似乎是罪魁禍首,服務器應設置編碼UTF-8和客戶端做的帶頭文件

Accept-Encoding: UTF-8 

並以UTF-8讀取響應。這可以通過瀏覽器中的手動URL進行測試。檢查HTML源代碼以查看Unicode是否不作爲實體給出(&12345;)。

+0

謝謝Joop Eggen。我已經按照你的建議嘗試過,並且仍然遇到同樣的問題。我會盡力而且會更新,如果有的話。 –

1

你可以嘗試刪除它
Spanned spanned = Html.fromHtml(stringBuilder.toString(),this,null); 嘗試打印spanned文本。