0
05-16 14:29:16.935: W/System.err(20981): java.lang.NumberFormatException: 
    unable to parse '��������������������' as integer

これは、私の Android アプリが 10 バイト長の文字列 (エラー メッセージでは 20 バイトとして示されている) を受け取ることになっているときに表示されるエラー メッセージとほとんど同じです。

BufferedReader in = new BufferedReader(
        new InputStreamReader(client.getInputStream(), "UTF-8"));
BufferedWriter out = new BufferedWriter(
        new OutputStreamWriter(socket.getOutputStream(), "UTF-8"));

^^ UTF-8を追加しました。

String count = String.format("%10s", 
        (new Integer(result.length())).toString()).replace(" ", "0");

これは私が送信した文字列を取得する方法であり、PC 側のログに正しく表示されるため、正常に機能しています。

ただし、Android 側では正しく受信されません。

BufferedReader in = new BufferedReader(
        new InputStreamReader(client.getInputStream(), "UTF-8"));
CharBuffer buf = CharBuffer.allocate(1024*1024);
in.read(buf);
char[] buffer = new char[10];
buf.get(buffer, 0, 10);
cont = Integer.parseInt(new String(buffer));

これが文字列を取得する方法ですが、正しく機能していないようです。より多くの経験を持つ誰かが、なぜこれが機能しないのかを理解するのに役立ちますか?

4

1 に答える 1

3

Java String は Unicode で、1 文字あたり 2 バイトです。それは知っておくといいです。

おそらく、文字列がどのようにエンコードされているかをストリームに伝える必要があります。私のおすすめはUTF-8です。

数値解析ビットのことはしばらく忘れて、何が送受信されているかを理解できるかどうかを確認することをお勧めします。読めない文字の例外は役に立ちません。

問題を単純な送受信に減らし、受信したものをログに記録します。ここでは、可視性と透明性があなたの味方です。何が得られるかを理解するまで、何が必要かを理解するのは困難です。

于 2012-05-16T13:35:56.003 に答える