有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用不同编码的不同JVM

假设我有两个JVM在运行,一个是客户机,另一个是服务器。假设客户机和服务器使用不同的编码。如果我在客户机上编写一个程序,通过网络将字符串发送到服务器,那么在客户机将字符串发送到服务器之前,是否需要在客户机中以服务器的编码方式对字符串进行编码?如果2首先使用不同的编码,这是否毫无意义?客户端和服务器如何处理通常使用不同编码交换消息的场景


共 (2) 个答案

  1. # 1 楼答案

    我想您遇到的是所谓的平台默认编码。例如,当使用新字符串(字节[])将字节转换为字符串时,默认编码用于将字节转换为字符串。不同的服务器可能具有不同的设置,这些设置具有不同的默认平台编码

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

    例如,要将字符串转换为UTF-8字节流,请使用getBytes(“UTF-8”),要获取字符串,请使用String(byte[],“UTF-8”)

  2. # 2 楼答案

    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");
    

    我建议使用^{}/^{},它为字符集安全String传输提供方法