socket通信中多收到了字符 \ufffd

我的程序是一个基于socket的即时群聊系统

客户端和服务器socket都是用utf-8编码。客户端和服务器在同一台机器上测试的时候,完全正常。当分开时,客户端本来应该收到hello这个单词,现在却多收到了两个字符 \ufffd\ufffd

eclipse中编译时设置了utf-8.

这是服务端的流:
OutputStreamWriter stream = new OutputStreamWriter(
socket.getOutputStream(), "UTF8");
pw = new PrintWriter(stream);
br = new BufferedReader(new InputStreamReader(
socket.getInputStream(), "UTF8"));
这是客户端的流:
BufferedReader br = new BufferedReader(new InputStreamReader(
clientSocket.getInputStream(), "UTF-8"));

OutputStreamWriter stream = new OutputStreamWriter(clientSocket.getOutputStream(), "UTF-8");

服务端发送的消息是:

pw.println("hello");
pw.flush();

客户端收到的是 \ufffd\ufffdhello

难道不同JRE传输数据会先传0xFFFE?
怀疑是这个问题,导致UTF-8无法解析,使用了替换符

请跟踪一下客户端,看看前两个字节是否为0xFFFE

编码是“UTF8”?……“-”呢?

"\ufffd\ufffd"通常出现在中文乱码中,这里只能建议楼主看看有没有这方面的因素,比如简/繁体中文啊,文件啊,中文GBK输入啊,等等。

检查一下两台机器是否用的是同一个语种。

[quote]我跟踪到了BufferedReader的fill()方法,发现InputStreamReader的in函数每次都会读到\ufffd,包括第一次读取“OK”,继续跟踪到StreamDecoder中的read方法,然后就是编译过的代码了,看不了。所以没有看到oxFFFE。 [/quote]
你直接跟踪clientSocket.getInputStream()
从不要从reader里面看,直接从stream里面

话说,你不要用PrintWrite封装试试。

[quote]我发现每个语句后面都会多一个字符\ufffd,比如说
发送OK,收到 OK\r\n\ufffd
我换成GBK传输结果同样是这样,同样地,同一台机器没有问题。 [/quote]
……
这个到底是前面多字符,还是后面多字符?
是多1个还是几个?