java编码问题,GBK与UTF-8转换

我的环境是GBK的编码,现在跟第三方通讯,对方是UTF-8的编码,我组的一个XML报文,需要转化成UTF-8的编码格式发送给对方,然后接收对方请求时需要将对方的UTF-8格式报文转换成GBK格式,这种情景如何解决?
ps: new String(s.getBytes("utf-8"),"gbk");这种不行,把utf-8编码的字节流用gbk转换就成乱码了

求大神给个解决方案!

这样转法当然不行啦。首先你要理解编码的含义:
用语言举个例子:
用英文跟中文表达“车这个概念,英文是Car,中文是车。
作为一个会英语的中国人,看到Car当然就能理解成“车”,而当他已经理解表达的意思是“车”,无论他用英文表达还是用中文表达都能正确地表达出来。
但是如果一个不会英语的中国人,看到Car就不能理解成“车”,所以不能用英文跟这个人沟通。

编码也是如此
当你的软件已经知道自己想要表达什么(s就是"车"这个概念),那么只需要用指定的编码(哪种语言,s.getBytes("xxx"))表达出来就可以了。你上面的做法就像是把Car硬要理解成中文,当然就乱码了。
当然这里用语言沟通指的是字节流(byte),是二进制传输。

首先,你的XML头必须写成GBK
<?xml version="1.0" encoding="GBK"?>
然后要看你用什么方式传输这个XML报文:
如果是以HTTP报文参数来传输的话,就必须把XML报文用URLEncoder去encode,这样中文会转换成%NN%这种东西,全是英文的就跟编码没什么太大关系了。
如果是以流的方式传输的话,就要做编码了,用一个BufferedWriter封装一个OutputStreamWriter再封装OutputStream就可以实现了
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, "GBK"));
writer.write(s,0,s.length());
writer.flush;

或者你也可以先把XML转换成字节数组,再拆包传输
byte[] byteArray = s.getBytes("GBK");
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-05
public class Demo {
    public static void main(String[] args) throws UnsupportedEncodingException {
        byte[] b1 = "你好".getBytes("utf-8");
        byte[] b2 = new String(b1,0,b1.length,"UTF-8").getBytes("GBK");
        System.out.println(new String(b1,0,b1.length));
        System.out.println(new String(b2,0,b2.length));
    }
}

 //一个小例子,您可以看一下。

追问

这个从UTF-8转GBK可以 从GBK转UTF-8不行 为什么呀

追答

完全可以啊,道理是一样的。

追问

控制台输出(工程编码为GBK):

控制台输出(工程编码为utf-8):

追答

算了,你把这个文件发我吧。[email protected]...

本回答被提问者采纳
相似回答