不同的jvms与不同的编码

时间:2014-02-27 21:32:26

标签: java encoding

假设我有2个jvms在运行 - 1是客户端而另一个是服务器。假设客户端和服务器使用不同的编码。如果我在客户端编写一个程序,通过网络将Strings发送到服务器,是否有必要在客户端将其发送到服务器之前,在服务器的编码中对客户端中的String进行编码?如果2首先使用不同的编码,这会毫无意义吗?客户端和服务器如何处理通常在两者都使用不同编码的情况下交换消息的情况?

2 个答案:

答案 0 :(得分:2)

我想你正在遇到所谓的平台默认编码。例如,使用新String(byte [])将字节转换为String时,默认编码用于将字节转换为String。不同的服务器可能具有不同的默认平台编码设置。

要防止由于不同的默认编码导致服务器的不同行为,请指定将bytes []转换为String时要使用的编码。如果您不知道要使用的编码,那么这是另一回事,但至少可以获得相同字节流的一致结果。

例如,要将String转换为UTF-8字节流,请使用getBytes(“UTF-8”)并返回String,使用String(byte [],“UTF-8”);

答案 1 :(得分:1)

JVM始终在String中使用UTF(阅读this answer)。

关键部分是String的传输,这可能发生在基于字节的流上。将String转换为byte[]实际上需要您指定编码。在大多数情况下你应该使用utf-8。

// On the client side
byte[] bytes = myString.getBytes("UTF-8");
serverStream.write(bytes);
// On the server side
byte[] bytes = /* read bytes */;
String myString = new String(bytes, "UTF-8");

我建议使用DataOutputStream / DataInputStream来提供针对charset-safe String传输的方法。