最近为商城接入游戏点卡充值接口,我们的项目环境是utf8编码,对方是GBK,为此造成了一些恼人的问题。(一下简称我们为J,对方为N)
N要求用GET方式提交参数,参数列表如k1=v1&k2=v2&.....&kn=vn; 其中,v要经过urlEncode,编码格式为GBK。
接收N发来的信息:
当参数中有中文的时候,直接用req.getParameter(“”),会产生乱码,因为该方法会自动调用urlDecode方法用容易默认的unicode编码对其解码,所以要这样:
byte[] names = req.getParameter("name").getBytes("ISO-8859-1");
String name = new String(names,"GBK");
如此,就能正确的得到中文。
有一个问题,java是以unicode存储代码的,那么在java代码中,String temp = new String("你好"); temp是什么编码呢?UTF-8还是GBK? 其实,还是unicode,只不过是输出或传送时,进行编码格式化。
向N发送数据
因为需要将value进行编码,用key+"="+URLEncoder.encode(value,"GBK"),这样编码就可以了,然后在发送请求时,httpcon.setRequestProperty("Content-Type", "text/xml;charset=GBK");
收工。
个人笔记,不能保证准确性。