【发布时间】:2020-09-24 01:31:16
【问题描述】:
我正在读取套接字流并将字节数组转换为 Java 和 C# 中的单个字符串,但结果不同...
C#代码:
string text = Encoding.Default.GetString(ms.ToArray());
Java 代码:
String text = new String(data);
我在研究中遇到的一个潜在问题是 C# 的默认编码是 UTF-32 而 Java 的默认编码是 UTF8,而 C# 使用 little endian 而 Java 使用 Big endian,所以解决方案是在java as UTF-32LE,但即便如此,它返回的结果与 C# 完全不同,而且大多数(如果不是全部)字符串都是 � 的组合
正如关于我在 Java 中的方法的额外信息,我使用 ByteArrayOutputStream 存储来自 DataInputStream 的数据,而在 C# 中,我使用 MemoryStream 存储来自 NetworkStream 的数据
【问题讨论】:
-
Java 的默认编码是您的平台默认支持的任何编码。它适用于希望以“简单”方式与本地平台兼容的学生。如果你想要 UTF-8,你必须指定它:docs.oracle.com/javase/8/docs/api/java/lang/…
-
您确定
Encoding.Default是UTF-32 吗?这似乎是一个奇怪的默认设置,因为没有 Windows 系统正常使用它。也许您应该打印出Encoding.Default,和/或在Java 端检查data中的实际字节?
标签: java c# datainputstream bytearrayoutputstream