2012-04-07 160 views
2

當我運行這個程序時,我輸入用戶名爲"dcole"和密碼"test",但是當我輸入它們時,他們返回"ÿûÿû ÿûÿû'ÿýÿûÿýdcole""ÿþÿþ ÿþÿþ'ÿütest"。下面的代碼:Java BufferedReader返回奇怪的字符

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 
+0

你在哪裏創建'BufferedReader'? – Jeffrey 2012-04-07 03:45:08

回答

0

也許你正在使用一個錯誤的字符集一個BufferedReader。

看看here,當你實例化新的InputStreamReader時,你可以定義字符集。

+0

現在它來了「與IP /127.0.0.1 客戶/127.0.0.1身份登錄????連接的客戶端????「?????? dcole 測試 」 – cheese5505 2012-04-07 03:58:49

+0

你必須設置輸入流和輸出流的正確字符集。如果您在輸出中設置了正確的字符集,則不需要執行此操作'「請輸入您的用戶名:」.getBytes(「UTF-8」)'。 – dash1e 2012-04-07 04:03:02

+0

這些是我的緩衝讀取器:'\t \t \t \t BufferedReader clientinput = new BufferedReader(new InputStreamReader(client.getInputStream(),「UTF8」)); \t \t \t \t的BufferedOutputStream clientoutput =新的BufferedOutputStream(client.getOutputStream());' – cheese5505 2012-04-07 04:09:30

0

如果輸入流是純粹的UTF-8,那麼「dcole」和「test」不會出現亂碼。 (如果你使用Latin-1或ASCII來解碼字節,以及許多其他字符集,它們會很好。)事實上,你正在看到預期的字符,但在它前面有額外的垃圾。

我懷疑客戶端實際上在用戶名和密碼之前增加了一些字節。換句話說,它不會發送簡單的文本 - 它以某種您尚未描述的協議發送消息。

事實上,我認爲這太問題或許可以解釋你的問題:Odd Behavior when Connecting to my Program