C++;和Java编码 我尝试使用java套接字和VC++应用程序进行通信,并使用套接字发送不同的消息。到目前为止,我唯一的问题是——我完全迷失在他们的编码中
默认情况下,Java使用UTF-8。就我而言,这是一个Unicode字符集。在我的VS项目中,我将设置设置为Unicode。尽管出于某种原因,当我调试代码时,我总是在内存中看到编码为CP1252的字符串。 此外,如果我尝试在Java中使用CP1252,它对英文字母很有效,但每当我尝试一些俄语字母时,每个字母都会得到一个C++;和Java编码 我尝试使用java套接字和VC++应用程序进行通信,并使用套接字发送不同的消息。到目前为止,我唯一的问题是——我完全迷失在他们的编码中,java,c++,unicode,encoding,utf-8,Java,C++,Unicode,Encoding,Utf 8,默认情况下,Java使用UTF-8。就我而言,这是一个Unicode字符集。在我的VS项目中,我将设置设置为Unicode。尽管出于某种原因,当我调试代码时,我总是在内存中看到编码为CP1252的字符串。 此外,如果我尝试在Java中使用CP1252,它对英文字母很有效,但每当我尝试一些俄语字母时,每个字母都会得到一个3f字节。 另一方面,如果我尝试在Java中使用UTF-8,则每个英文字母的长度为1字节,但每个俄文字母的长度为2字节。这不是一种多字节编码吗 C++的一些文档说明 STD::S
3f
字节。
另一方面,如果我尝试在Java中使用UTF-8,则每个英文字母的长度为1字节,但每个俄文字母的长度为2字节。这不是一种多字节编码吗
如果你想让套接字工作,那么你必须让双方在编码上达成一致。否则,您将面临一场失败的战斗。java不支持utf-8编码。您可以用utf8编写源代码,并在属性中使用一些奇怪的符号进行编译(有时真的很烦人)
字符串在java中的内部表示是utf-16(请参见)Unicode是字符集,utf-8和utf-16是Unicode编码。对于英语(实际上是ASCII)字符,UTF-8产生与CP1252相同的值,UTF-16添加一个零字节。如果您想使用俄语(西里尔文),可以使用UTF-8、UTF-16或CP1251。但两个应用程序必须在编码上达成一致 例如,如果您同意UTF-8,则以下内容将使用UTF-8将Java字符串s转换为字节数组: 字节[]b=s.getBytes(“UTF-8”) 然后: outputStream.write(b)
将在套接字上发送数据。那么什么更容易?在C++中使用CP1252还是java中的UTF-8?首先,我认为VC++应用程序在内存中使用什么编码并不重要,它是通过套接字发送的。所以,问题是:将Java应用程序更改为发送CP1252更容易,还是将VC++应用程序更改为发送UTF-8更容易。我更喜欢后者,因为我是个傻瓜,讨厌所有的东西。但是,我认为这完全是基于我的仇恨的观点@黑色Java中的默认字符集可能是UTF-8,但这取决于您的环境。Java可能默认在另一台机器上使用不同的东西。您可以通过使用UTF-8编码来避免这种不确定性,而不管默认编码是什么。这对Java部分没有帮助,但在VC++中,尝试转到Project->Properties->Configuration Properties->General->Character Set并将值设置为“Use Multi-Byte Character Set”