现在的位置: 首页 > 综合 > 正文

Java应用打包后运行需要注意编码问题

2013年10月12日 ⁄ 综合 ⁄ 共 823字 ⁄ 字号 评论关闭

本文出处:http://blog.csdn.net/chaijunkun/article/details/7624338,转载请注明。由于本人不定期会整理相关博文,会对相应内容作出完善。因此强烈建议在原始出处查看此文。

最近在做一个项目,项目总的来说就是和数据库打交道,取出数据来通过HTTP协议提交到一个接口上去。具体功能不多说了,只是讲这里面的一点——编码问题
项目当中,由于要把数据提交到一个对外提供服务的接口中去。该接口有类似于OAuth的验证机制。最后需要对提交的数据进行签名。签名的最后一步即取所有数据的MD5值。
在Java项目中,个人喜欢将项目的默认编码改为UTF-8。使用的开发工具以MyEclipse为主。然而,奇怪的问题出现了。当我在IDE中对项目进行调试的时候没有任何问题,但是打成了jar包后再通过
java -jar project.jar
运行的时候,每次提交数据,接口都会返回数据说我的签名不正确。换句话说就是我的最后一步,做MD5运算的时候出了问题。

看到是安全算法的问题,我就联想到了之前做过一个安卓的开发项目,出问题的项目使用的是java.security.MessageDigest提供的MD5算法库。然而在安卓开发包中提供的安全算法库和标准的jdk中提供的比太一样,有的实现了,有的没实现。可是后来又想,都是在本机运行的,也不是安卓项目,为什么打了jar包就不行呢?几经波折,又是查看参数的hashCode,又是检查所有提交内容的十六进制数据,发现是文本编码出了问题。在MyEclipse中是正确的,但是打出jar包后,启动命令行一直没设置字符串默认编码,因此java虚拟机就按照所在系统的默认编码运行了。我使用的是Windows环境,那么自然是GBK编码。

后来通过查阅资料,解决的办法就是加一个参数指定编码:
java -Dfile.encoding=utf-8 -jar project.jar
这样就可以了。工具正常运行了。

【上篇】
【下篇】

抱歉!评论已关闭.