字符串由于编码问题导致生成的Md5不同

今天工作上遇到一个问题,json格式字符串用于生成md5的签名,用于服务端调用快递100网站的生成快递单的接口,但是老返回签名错误,原因是我生成的签名和快递100的签名一直不一样,但是用我的json字符串在他的方法上却跟他的一样(页面上的js的md5方法),从这里看出,不是我的字符串问题,是我的方法问题,于是乎我再Main方法中试我的md5方法,结果显示的是跟快递100是一样的,我的天,Main方法和项目启动调用接口生成的Md5还不一样,一样的方法,不同的是一个是main方法生成,一个是启动服务调用接口,接口里用这个方法生成的。

百思不得其解,一样的方法,再不同的方式调用的结果怎么会不一样呢,思考尝试了一下午,原来:

在md5方法中,字符串(有中文的)传进去是要得到字符串的Byte数组的,Byte[] b = s.getBytes();这个方法没有指定编码格式,而我的tomcat设置了编码是GBK,所以当在tomcat中执行getBytes()方法的时候是默认跟随环境的编码,所以当在tomcat环境中执行的时候getBytes()是GBK编码的,而在Main方法是根据eclipse文件的编码来执行的,而我们eclipse的编码一般都是设置成UTF-8的,所以在Main里编码是utf-8,而tomcat是GBK,导致生成的MD5不一样,

解决方法:s.getBytes("UTF-8"),通过system.getProperty("file.encoding")可以查看到当前java文件编译成class文件是什么编码的

好了,问题找到了,解决方法也找到了,问题解决了,但是呢,底层的原因呢,是class文件,服务是在tomcat中启动的,所以class文件也在tomcat里,class文件的编码也就是默认跟tomcat 一样了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值