在§之前附加一个特殊字符

我有一个客户端应用程序发送请求到服务器。 服务器从数据库中获取一个字段并发送一个java.lang.String响应给客户端。 服务器在JBoss v5.0上运行。 不寻常的是,当服务器在Windows机器上运行时,客户端收到的响应是正常的,但是在Linux上运行时,编码有一些问题。

这是数据库中的数据: "INET§IMPNG\n"

在Windows上运行服务器时正确收到响应。

当服务器在Linux上运行时,在§之前附加一个特殊字符。 有什么特别的事情我需要在服务器端做。 任何帮助,将不胜感激。

编辑:

收到的答复是: INET§IMPNG

这几乎可以肯定是一个字符编码问题。 为了避免客户端与服务器之间的不匹配,请始终指定特定的编码并避免使用默认编码。 (所以,例如,而不是"xyz".getBytes() ,使用"xyz".getBytes("UTF-8")

你在这里看到的错误是因为Linux服务器默认发送字符串为UTF-8。 在UTF-8中,常规的ASCII字符被编码为一个字节。 §字符被编码为两个字节。 如果你使用CP-1252解码,你会看到§因为这两个字节被解释为两个独立的字符。

Windows服务器将使用http://en.wikipedia.org/wiki/Windows-1252 ,它可以将§编码为单个字节。

如果您正在使用自己的协议,则应指定在线路上使用哪种字符编码。 我建议你默认为UTF-8(互联网标准)。 发送字符串时,应该使用"xyz".getBytes("UTF-8") 。 如果您收到该字符串,则应使用new String(bytes, "UTF-8")

如果您使用的是HTTP,您的客户端应该遵守HTTP规范的第14部分的标题。 我建议你使用一个实现的HTTP客户端,如Apache Commons HTTPClient或内置的J2SE。 在服务器端,您应该使用Servlet中的response.getWriter()方法来获取将自动使用约定编码的编写器。 请注意,你不能只输出字节,因为服务器和客户端可能已经同意HTTP流的另一个传输编码!