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

标签 java android sockets unicode

我阅读了有关此问题的其他 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/

相关文章:

java - 警告 : Encoded password does not look like BCrypt

java - 在 Hibernate 4 中定义默认类型映射

Java:将文件从服务器传输到客户端以及从客户端传输到服务器

Javascript 客户端从 Java Web 套接字读取

java - 学习核心 Java 后的客户端-服务器数据库编程

java - 使用java代码从mongodb集合中获取单个值

java - 如何使用 @ComponentScan 排除两个同名包之一?

Android mask 图像

java.lang.ClassCastException : android. widget.LinearLayout 无法转换为 android.widget.ListView

android - 在 Android 中优化绘画视频编码