我阅读了有关此问题的其他 SO 问题,但没有解决我的问题,因此我认为这篇文章不是重复的。
我想将 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
构造器可以解决这个问题,但这对我不起作用,结果是一样的:
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 - 将 unicode 字符串发送到服务器套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35172856/