返回奇怪字符的Java BufferedReader

返回奇怪字符的Java BufferedReader,java,character,bufferedreader,Java,Character,Bufferedreader,当我运行这个程序时,我输入用户名作为dcole和密码测试,但当我输入它们时,它们返回的是dcole和密码测试。代码如下: clientoutput.write("Please enter your username: ".getBytes("UTF-8")); clientoutput.flush(); String username = clientinput.readLine(); out("Client " + clientip + " logged in as " + username

当我运行这个程序时,我输入用户名作为dcole和密码测试,但当我输入它们时,它们返回的是dcole和密码测试。代码如下:

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

可能您使用的BufferedReader具有错误的字符集


请看,当您实例new InputStreamReader时,您可以定义字符集。

可能您使用的BufferedReader具有错误的字符集


请看,当您实例new InputStreamReader时,您可以定义字符集。

如果输入流是纯UTF-8,那么dcole和test就不太可能被篡改。如果您使用拉丁语-1或ASCII来解码字节,以及许多其他字符集,它们就可以了。事实上,你看到的是预期中的角色,但前面有额外的垃圾

我怀疑客户端实际上在用户名和密码前面加了一些额外的字节。换句话说,它不是发送简单的文本——它是用一些您没有描述过的协议发送消息


事实上,我认为这个问题可以解释您的问题:

如果输入流是纯UTF-8,那么dcole和test就不太可能被篡改。如果您使用拉丁语-1或ASCII来解码字节,以及许多其他字符集,它们就可以了。事实上,你看到的是预期中的角色,但前面有额外的垃圾

我怀疑客户端实际上在用户名和密码前面加了一些额外的字节。换句话说,它不是发送简单的文本——它是用一些您没有描述过的协议发送消息


事实上,我认为这个问题也许可以解释你的问题:

你在哪里创建BufferedReader?你在哪里创建BufferedReader?现在,它提供了与IP/127.0.0.1客户端/127.0.0.1连接的客户端,作为??????dcole测试您还必须为输入流和输出流设置正确的字符集。如果在输出上设置了正确的字符集,则无需执行此操作,请输入用户名:.getBytesUTF-8。这些是我的缓冲读取器:`BufferedReader clientinput=new BufferedReadernew InputStreamReaderclient.getInputStream,UTF8;BufferedOutputStream clientoutput=新建BufferedOutputStreamclient.getOutputStream`尝试使用PrintWriter.print输出数据,并使用UTF-8字符集初始化。现在,它提供了与IP/127.0.0.1客户端/127.0.0.1客户端连接的客户端,该客户端以???身份登录??????dcole测试您还必须为输入流和输出流设置正确的字符集。如果在输出上设置了正确的字符集,则无需执行此操作,请输入用户名:.getBytesUTF-8。这些是我的缓冲读取器:`BufferedReader clientinput=new BufferedReadernew InputStreamReaderclient.getInputStream,UTF8;BufferedOutputStream clientoutput=新建BufferedOutputStreamclient.getOutputStream`尝试使用PrintWriter.print输出数据,并使用UTF-8字符集初始化它。