2

このプログラムを実行するときは、ユーザー名"dcole"とパスワード"test"を入力しますが、入力するととで返され"ÿûÿû ÿûÿû'ÿýÿûÿýdcole"ます"ÿþÿþ ÿþÿþ'ÿütest"。コードは次のとおりです。

clientoutput.write("Please enter your username: ".getBytes("UTF-8"));
clientoutput.flush();

String username = clientinput.readLine();
out("Client " + clientip + " logged in as " + username);

String askforpass = "Please enter the password for " + username + ": ";
clientoutput.write(askforpass.getBytes());
clientoutput.flush();

String password = clientinput.readLine();

out(password);

コンソール:

Client connected with the IP /127.0.0.1
Client /127.0.0.1 logged in as ÿûÿû ÿûÿû'ÿýÿûÿýdcole ÿþÿþ ÿþÿþ'ÿütest
4

2 に答える 2

0

間違った文字セットでBufferedReaderを使用している可能性があります。

ここを見てください。新しいInputStreamReaderをインスタンス化するときに、文字セットを定義できます。

于 2012-04-07T03:45:59.303 に答える
0

入力ストリームが純粋なUTF-8の場合、「dcole」と「test」が文字化けする可能性はほとんどありません。(Latin-1またはASCIIを使用してバイトをデコードし、他の多くの文字セットも使用した場合は問題ありません。)確かに、期待される文字が表示されていますが、その前に余分なゴミがあります。

クライアントが実際にユーザー名とパスワードの前に余分なバイトを置いているのではないかと思います。言い換えれば、それは単純なテキストを送信しているのではなく、あなたが説明していないプロトコルでメッセージを送信しているのです。

実際、このSOの質問はあなたの問題を説明するかもしれないと思います: 私のプログラムに接続するときの奇妙な振る舞い

于 2012-04-07T04:23:08.510 に答える