Java 将unicode字符串发送到服务器套接字
我阅读了其他关于这个问题的问题,但没有什么能解决我的问题,所以我认为这篇文章不是重复的。 我想将一个Unicode字符串从android客户端套接字发送到服务器套接字,但我从服务器接收所有Unicode字符作为问号(我在windows上使用c#服务器)。我使用WireShark监控网络,它将所有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
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))代码>一切正常。非常感谢你。