日期:2014-05-19  浏览次数:20617 次

乱码问题,求给力的!!!!!标题要长长长长长长长长长长
最近在做一个与银行交互的模块,接受和发送都没有问题,就是剩一个中文乱码的问题

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的格式也不行,求大神指点
------最佳解决方案--------------------
OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream(),"GBK");

------其他解决方案--------------------
lz使用
OutputStreamWriter out = null;
out = new OutputStreamWriter(con.getOutputStream(),Charset.forName("GBK"));

试试
 还
String.valueOf(xml.getBytes().length()))  xml.getBytes是数组 ,数组是是没有length方法的
只有length属性!
------其他解决方案--------------------


不了解你真实的数据传输流程不好分析,不过银行的调试确实很麻烦。
有时候也和你的测试环境有关系。我就遇到过一次CentOS和ubuntu下对中文的转码不一样,MD,调试了半个月才解决,别提协调起来有多麻烦了。

我建议你把数据多弄些输出到日志文件里面,然后把各方的日志文件进行对比,先找出乱码是在哪个环节产生的,然后再具体问题具体分析。

------其他解决方案--------------------
谢谢各位,2L,3L的我试了下OK了,感想各位大神,刚开始只是想到怎么转成GBK的编码格式再去输出给前置机,是我走了误区,搞了2天了,项目就剩一点了,BOSS快要把我给吃了
------其他解决方案--------------------
new String(xml.getBytes("ISO-8859-1"),"GBK")  试试  或者你直接吧xml打印到日志或者后台里面看看是乱码,贴图出来。