最近因为公司需要,要做一个微信支付,碰到一个签名的问题。 折腾了我两天,郁闷呀
1、先说一下,签名的问题,按照规则排序就不说了,最后说一下编码
data=new String( data.getBytes( "UTF-8"),"ISO8859-1" );
2、第二个是重点
这个也是对的,关键是这个改完了,还签名错误 最奇葩的是junit 单元测试时过了的,但是 在生产环境中,就是有问题。然后就是各种折腾,首先还是测试,把中文换掉,OK的,说明还是编码的问题。然后再检查httpclient ,提交时候的编码,各种比对,问题以后。后来发现,在没有提交的时候,签名已经有问题了,比对内容,UE,然后人眼比对,各种无奈呀,最后,直接两个str equals,居然是true ,然后傻脸了,最后就是想tomcat 和junit 有什么不同,既然是java ,那么默认的肯定是UTF-8,一个噢然的机会,撇了一个签名函数 Md5 签名的参数是 byte ,需要把 String 转为byte ,然后就改了.getBytes("UTF-8") ,然后就OK了 ,后来就像这个问题。
3、结论
在junit 下 str.getBytes()==str.getBytes("UTF-8")
在tomcat7 下str.getBytes()==str.getBytes("GBK"),
tomcat 版本是 7
不是说java 默认下都是UTF-8 么,为什么会这样呢?