2013-10-01 36 views
1

在我的android應用程序中,我使用套接字並獲取XML作爲響應。 XML,我得到的是以下幾點:如何解碼android中的特殊字符?

<response> 
    <result> 
     <id>90</id> 
     <name>J�nna</name> 
    </result> 
</response>�� 

以下是獲得響應代碼:

PrintWriter writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream())) ; 
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8")); 

writer.write(sMessage); 
writer.flush(); 

StringBuilder sb = new StringBuilder(); 
boolean dataStreamStarted = false; 
int sleepCounter = 0; 
int sleepMaxCounter = 50; 
int sleepMaxDataCounter = 3; 
int sleepTime = 50; 
long startTime = System.currentTimeMillis(); 
while(true) 
{ 
    if (reader.ready()) 
    { 
     sb.append((char) reader.read()); 
     dataStreamStarted = true; 
    } 
    else 
    { 
     Thread.sleep(sleepTime); 
     if (dataStreamStarted && (sleepCounter >= sleepMaxDataCounter)) 
     { 
      break; 
     } 
     else 
     { 
      if (sleepCounter >= sleepMaxCounter) 
      { 
       break; 
      } 
     } 
     sleepCounter++; 
    } 
} 
long endTime = System.currentTimeMillis(); 

writer.close(); 
reader.close(); 
socket.close(); 

response = sb.toString(); 

我嘗試使用下面的代碼此字符串解碼:

String str = URLDecoder.decode(response, "UTF-8"); 

,但它不是使任何差異。字符串看起來仍然相同由於這些字符,我無法解析這個字符串。任何想法我怎麼能解決它?我搜索了很多,我找到的任何解決方案都沒有奏效。提前致謝。

+0

張貼在您收到的字符串代碼。 (您創建「響應」值的位置) – njzk2

回答

0

嘗試此方法以支持UTF-8的響應

public String getResponseBody(final HttpEntity entity) throws IOException, ParseException { 

     if (entity == null) { 
      throw new IllegalArgumentException("HTTP entity may not be null"); 
     } 

     InputStream instream = entity.getContent(); 

     if (instream == null) { 
      return ""; 
     } 

     if (entity.getContentLength() > Integer.MAX_VALUE) { 
      throw new IllegalArgumentException(

      "HTTP entity too large to be buffered in memory"); 
     } 

     StringBuilder buffer = new StringBuilder(); 

     BufferedReader reader = new BufferedReader(new InputStreamReader(instream, HTTP.UTF_8)); 
     String line = null; 
     try { 
      while ((line = reader.readLine()) != null) { 
       buffer.append(line); 
      } 

     } finally { 
      instream.close(); 
      reader.close(); 
     } 
     return buffer.toString(); 

    }