发布网友 发布时间:2022-04-24 09:43
共2个回答
热心网友 时间:2022-05-07 18:49
这样转法当然不行啦。首先你要理解编码的含义:
用语言举个例子:
用英文跟中文表达“车这个概念,英文是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");
热心网友 时间:2022-05-07 20:07
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));
}
}
//一个小例子,您可以看一下。