Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将unicode字符串发送到服务器套接字_Java_Android_Sockets_Unicode - Fatal编程技术网

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

Java 将unicode字符串发送到服务器套接字,java,android,sockets,unicode,Java,Android,Sockets,Unicode,我阅读了其他关于这个问题的问题,但没有什么能解决我的问题,所以我认为这篇文章不是重复的。 我想将一个Unicode字符串从android客户端套接字发送到服务器套接字,但我从服务器接收所有Unicode字符作为问号(我在windows上使用c#服务器)。我使用WireShark监控网络,它将所有Unicode字符显示为点。这是我的发送代码: String msg = "تست سوکت"; PrintWriter out = new PrintWriter(new BufferedWriter

我阅读了其他关于这个问题的问题,但没有什么能解决我的问题,所以我认为这篇文章不是重复的。

我想将一个Unicode字符串从android客户端套接字发送到服务器套接字,但我从服务器接收所有Unicode字符作为问号(我在windows上使用c#服务器)。我使用WireShark监控网络,它将所有Unicode字符显示为点。这是我的发送代码:

String msg = "تست سوکت";

PrintWriter out = new PrintWriter(new BufferedWriter(
    new OutputStreamWriter(socket.getOutputStream())),
    true);

out.println(msg);
out.flush();
一些stackOverFlow问题说,将
charSetEncoder
添加到
OutputStreamWriter
constractor可以解决这个问题,但这对我不起作用,结果是一样的:

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");

您的Java代码是正确的

Wireshark未显示unicode字符可能是Wireshark的一个限制

因此,接收C#程序肯定是个问题。您确定此程序需要UTF-8字符流吗?
Windows和C上的“Unicode”通常表示UTF-16,而不是UTF-8。

您确定问题出在java客户端代码中,而不是服务器C代码中吗?“然后我尝试将字节数组作为字符串发送,”。这不是一个好主意。您应该发送字节数组本身。因此不能使用println()。使用write()。尝试使用msg.getBytes。当然,您应该显示接收的C#代码。@Gavriel问题出在服务器代码中,但由wireShark产生的结果让我相信这是客户端问题。谢谢你的帮助。@greenapps谢谢你的提示。我记住了它,我使用
state.sb.Append(Encoding.ASCII.GetString(state.buffer,0,bytesRead))
在我的服务器中读取内容,我只是将其更改为
state.sb.Append(Encoding.UTF8.GetString(state.buffer,0,bytesRead))一切正常。非常感谢你。