我读了关于这个问题的其他SO问题,并没有解决我的问题所以我认为这篇文章不重复。
我想从android客户端套接字向服务器套接字发送Unicode字符串但我从服务器接收所有Unicode字符作为问号(我在Windows上使用c#server)。我使用WireShark监视网络,它将所有Unicode字符显示为点。这是我的发送代码:
String msg = "تست سوکت";
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())),
true);
out.println(msg);
out.flush();
某些stackOverFlow问题说将charSetEncoder
添加到OutputStreamWriter
约束器可以解决这个问题,但这对我没有用,结果是一样的:
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream(),
Charset.forName("UTF-8").newEncoder())),
true);
// Or
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream(),
"UTF-8")),
true);
之后我尝试将字节数组作为字符串发送,但是不向服务器发送任何内容:
byte[] byteArray = msg.getBytes(Charset.forName("UTF-8"));
out.println(byteArray.toString() + "\n");
答案 0 :(得分:2)
您的Java代码是正确的。
Wireshark没有显示unicode字符可以说是Wireshark的限制。
因此接收C#程序必定是问题所在。你确定这个程序需要一个UTF-8字符串吗? Windows上的“Unicode”和C#通常表示UTF-16,而不是UTF-8。