1.两个系统间http协议接口调用,服务端系统编码格式是UTF-8,客户端系统是GBK,
而且两个系统均无法让步让编码统一,客户端端用的是GBK编码传中文,服务端怎么进行转换成UTF-8的,而且响应时还要转成GBK的?
2.首先肯定不能直接通过new String(str.getBytes(“GBK”),”UTF-8″);把GBK转成UTF-8,无论怎么转都是乱的,是不是需要单独写工具类进行转码啊?
你得理解new String(str.getBytes(“GBK”),”UTF-8″);这句话的意义,才能知道为什么会失败。
首先,Java里的String内部是UTF-16LE编码的。
str.getBytes(“GBK”),得到了一个Byte数组,内容是将str的编码转换为GBK。
new String(str.getBytes(“GBK”),”UTF-8″),则是将这个Byte数组的内容当作UTF-8编码的数据,转换为String(UTF-16LE)。
明白了?这样能行才有鬼呢。
客户端和服务器,他们只都是Java,那么Java里的String编码一定是UTF-16。不会受到系统编码(Windows或Linux)的影响。
这种情况下最好不直接发送String,因为String会被你用的库它自动转换编码(以tomcat为例,默认iso8859-1)。
如果你可以直接发送和接收Byte数组,那么你完全可以将协议规定UTF-8。任何一方接受数据都是new String(data, “UTF-8”),发送数据都是str.getBytes(“UTF-8”)。
如果客户端代码你改不了或者用C等别的语言写的。你确