最近在做一个与银行交互的模块,接受和发送都没有问题,就是剩一个中文乱码的问题String xml = "<NAME>上海</NAME>";
URL url = new URL(urlStr);
URLConnection con = url.openConnection();
con.setDoOutput(true);
con.setRequestProperty("USER-Agent", "<Client Application Name>");
con.setRequestProperty("Content-Type", "application/x-fox");
con.setRequestProperty("Content-Length", String.valueOf(xml.getBytes().length()));OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream());
out.write(xml);但是这样发送到银行的前置机上面,在银行前置机上面输出来的中文是乱码,银行这边只是支持GB2312\GBK\GB18030编码格式,我通过
new String(xml.getBytes(),"GBK"),这样的方式不行,也用过先转成UNICODE格式,在转成GBK的格式也不行,求大神指点
URL url = new URL(urlStr);
URLConnection con = url.openConnection();
con.setDoOutput(true);
con.setRequestProperty("USER-Agent", "<Client Application Name>");
con.setRequestProperty("Content-Type", "application/x-fox");
con.setRequestProperty("Content-Length", String.valueOf(xml.getBytes().length()));OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream());
out.write(xml);但是这样发送到银行的前置机上面,在银行前置机上面输出来的中文是乱码,银行这边只是支持GB2312\GBK\GB18030编码格式,我通过
new String(xml.getBytes(),"GBK"),这样的方式不行,也用过先转成UNICODE格式,在转成GBK的格式也不行,求大神指点
OutputStreamWriter out = null;
out = new OutputStreamWriter(con.getOutputStream(),Charset.forName("GBK"));试试
还
String.valueOf(xml.getBytes().length())) xml.getBytes是数组 ,数组是是没有length方法的
只有length属性!
有时候也和你的测试环境有关系。我就遇到过一次CentOS和ubuntu下对中文的转码不一样,MD,调试了半个月才解决,别提协调起来有多麻烦了。我建议你把数据多弄些输出到日志文件里面,然后把各方的日志文件进行对比,先找出乱码是在哪个环节产生的,然后再具体问题具体分析。