2

私の Android アプリでは、ソケットを使用して応答で XML を取得しています。私が取得するXMLは次のとおりです。

 <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");

しかし、違いはありません。文字列はまだ同じように見えます。これらの文字のため、この文字列を解析できません。どうすれば解決できますか?私はたくさん検索しましたが、見つけた解決策はどれもうまくいきませんでした。前もって感謝します。

4

1 に答える 1

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();

    }
于 2013-10-01T10:47:46.783 に答える