将unicode字符串发送到服务器套接字

时间:2016-02-03 09:18:40

标签: java android sockets unicode

我读了关于这个问题的其他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");

1 个答案:

答案 0 :(得分:2)

您的Java代码是正确的。

Wireshark没有显示unicode字符可以说是Wireshark的限制。

因此接收C#程序必定是问题所在。你确定这个程序需要一个UTF-8字符串吗? Windows上的“Unicode”和C#通常表示UTF-16,而不是UTF-8。