Java字符串结果与C不同#

Java字符串结果与C不同#,java,c#,datainputstream,bytearrayoutputstream,Java,C#,Datainputstream,Bytearrayoutputstream,我正在读取套接字流,并在Java和C#中将字节数组转换为单个字符串,但结果不同 C#代码: Java代码: String text = new String(data); 我在研究中遇到的一个潜在问题是C#的默认编码是UTF-32,Java的默认编码是UTF8,C#使用小尾端,Java使用大尾端,因此,解决方案是将java中的字符集定义为UTF-32LE,但即使如此,它返回的结果也与C完全不同,而且大多数字符串(如果不是全部的话)都是� 正如关于Java方法的额外信息一样,我使用ByteArr

我正在读取套接字流,并在Java和C#中将字节数组转换为单个字符串,但结果不同

C#代码:

Java代码:

String text = new String(data);
我在研究中遇到的一个潜在问题是C#的默认编码是
UTF-32
,Java的默认编码是
UTF8
,C#使用小尾端,Java使用大尾端,因此,解决方案是将java中的字符集定义为
UTF-32LE
,但即使如此,它返回的结果也与C完全不同,而且大多数字符串(如果不是全部的话)都是


正如关于Java方法的额外信息一样,我使用
ByteArrayOutputStream
来存储
DataInputStream
中的数据&在C中,我使用
MemoryStream
来存储
NetworkStream
中的数据,因为流中的字节是使用某种编码进行编码的,必须在C#和Java代码中显式设置正确的编码

它们使用不同的默认编码


要使字节流具有互操作性,必须坚持使用一种编码,该编码用于将字符串编码为字节。或者在流中的某个位置交换编码类型。

由于流中的字节是使用某种编码进行编码的,因此必须在C#和Java代码中显式设置正确的编码

它们使用不同的默认编码


要使字节流具有互操作性,必须坚持使用一种编码,该编码用于将字符串编码为字节。或者在流中的某个地方交换编码类型。

我正在尝试配置Java以输出与C#相同的结果,有人说,
UTF-32
是C#的默认值,它使用小尾端,所以我尝试了
新字符串(字节,“UTF-32LE”)
但它仍然向C#输出完全不同的结果,有什么不同?只是小端和大端不同,或者没有什么可比性?@Michael如果我在Java中使用
UTF8
,它在某种程度上是相似的,但整个字符串不匹配&使得一些响应无法读取
,如果我使用建议的
UTF-32LE
它是不可比较的,整个字符串是
和一些其他变体,如
䀀Ā
但没有可读性。尝试查看字节数组并进行比较。不确定这是问题所在,但你知道big-endian和little-endian的区别吗?@Michael我不熟悉big-endian和little-endian,但这不是字节的存储方式?Big-endian和Little-endian几乎是相反的。我试图将Java配置为输出与C#相同的结果,有人说
UTF-32
是C#的默认值,它使用Little-endian,所以我尝试了
新字符串(字节,“UTF-32LE”)
,但它仍然向C#输出完全不同的结果,有什么不同?只是小端和大端不同,或者没有什么可比性?@Michael如果我在Java中使用
UTF8
,它在某种程度上是相似的,但整个字符串不匹配&使得一些响应无法读取
,如果我使用建议的
UTF-32LE
它是不可比较的,整个字符串是
和一些其他变体,如
䀀Ā
但没有可读性。尝试查看字节数组并进行比较。不确定这是问题所在,但你知道big-endian和little-endian的区别吗?@Michael我不熟悉big-endian和little-endian,但这不是字节的存储方式?Big-endian和Little-endian几乎是相反的,Java的默认编码是您的平台默认支持的任何编码。它是为那些希望以“简单”的方式与本地平台兼容的学生设计的。如果需要UTF-8,则必须指定它:是否确定
编码。默认值为UTF-32?这似乎是一个奇怪的默认设置,因为没有Windows系统正常使用它。也许您应该打印出
Encoding.Default
,和/或在Java端检查
data
中的实际字节?Java的默认编码是您的平台默认支持的任何编码。它是为那些希望以“简单”的方式与本地平台兼容的学生设计的。如果需要UTF-8,则必须指定它:是否确定
编码。默认值为UTF-32?这似乎是一个奇怪的默认设置,因为没有Windows系统正常使用它。也许您应该打印出
Encoding.Default
,和/或在Java端检查
数据中的实际字节?
String text = new String(data);