Java和C#二进制字符格式的差异

Java和C#二进制字符格式的差异,java,c#,sockets,Java,C#,Sockets,我正试图通过网络编写一个字符,供Java读取。在C中,我使用的是二进制编写器,在Java中,我的所有数据都被放入字节缓冲区 我读到C#a字符是2字节,因为它是编码的,但是我也知道在Java中,字符也是两个字节 据此判断: 我假设Java中的字符实际上只有一个字节?如何在网络上书写和交换字符 在将字符串序列化到套接字上时,找出Windows端使用的特定编码,然后在Java端使用相应的编码从字节构造字符串。例如,如果Windows C#真的使用原始的双字节unicode编码(现在称为“UCS-2”)

我正试图通过网络编写一个字符,供Java读取。在C中,我使用的是
二进制编写器
,在Java中,我的所有数据都被放入
字节缓冲区

我读到C#a
字符
是2字节,因为它是编码的,但是我也知道在Java中,字符也是两个字节

据此判断:


我假设Java中的字符实际上只有一个字节?如何在网络上书写和交换字符

在将字符串序列化到套接字上时,找出Windows端使用的特定编码,然后在Java端使用相应的编码从字节构造字符串。例如,如果Windows C#真的使用原始的双字节unicode编码(现在称为“UCS-2”)进行序列化,您将使用:

String string = new String(bytes, "UCS-2");
然而,我认为很可能您可以在Windows上使用更紧凑的编码进行序列化,例如UTF-8,它将大多数字符编码为一个字节。在这种情况下,您将使用

String string = new String(bytes, "UTF-8");
请注意,Java对驻留在内存中的字符串使用两字节的字符表示,但在序列化和反序列化时,通常使用更紧凑的编码,如UTF-8。有关Java字符串的更多信息,请参阅以下位置的javadoc:


您使用的是哪个频道?插座?休息肥皂?@matcheek——插座。我不知道这和问题有关,抱歉。TcpClient。您需要确保两端使用相同的编码。除此之外,我不明白这为什么行不通