java编码问题,GBK与UTF-8转换
我的环境是GBK的编码,现在跟第三方通讯,对方是UTF-8的编码,我组的一个XML报文,需要转化成UTF-8的编码格式发送给对方,然后接收对方请求时需要将对方的UTF-8...
我的环境是GBK的编码,现在跟第三方通讯,对方是UTF-8的编码,我组的一个XML报文,需要转化成UTF-8的编码格式发送给对方,然后接收对方请求时需要将对方的UTF-8格式报文转换成GBK格式,这种情景如何解决?
ps: new String(s.getBytes("utf-8"),"gbk");这种不行,把utf-8编码的字节流用gbk转换就成乱码了
求大神给个解决方案! 展开
ps: new String(s.getBytes("utf-8"),"gbk");这种不行,把utf-8编码的字节流用gbk转换就成乱码了
求大神给个解决方案! 展开
2个回答
展开全部
这样转法当然不行啦。首先你要理解编码的含义:
用语言举个例子:
用英文跟中文表达“车这个概念,英文是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");
用语言举个例子:
用英文跟中文表达“车这个概念,英文是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");
推荐于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不行 为什么呀
追答
完全可以啊,道理是一样的。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询