本文主要以自己的例子叙述了在cmd中执行jar包时,遇到的编码问题,以及解决问题的过程。
问题:程序在eclipse中进行开发,涉及一些IO操作,且需要在不同的机子上跑,因此为了方便,将代码打包成了jar包。但是发现在eclipse中结果运行正确,在cmd中运行结果却错误。对问题进行调试,最后发现问题出在以下代码中:
if(splitLine[8].equals("空车"))
该判断中涉及到了中文字符,数据是从一个utf-8编码的文件中读取的,而我们在eclipse中一般都设置默认编码为utf-8编码,因此可以正确判断。但是cmd默认的却是以gbk编码来执行,因此这里的判断显然会出错。
尝试1:通过改变cmd默认编码方式来执行此jar包
可以通过http://jingyan.baidu.com/article/e75aca85440f01142edac636.html该方式来改变cmd默认编码。即在cmd命令窗口中输入:
chcp 65001
cmd将会进入utf-8编码模式,在该模式下运行jar包
但是结果仍然是错误的,该方法并没有改变java在执行时的编码方式。
尝试2:规定执行java时的编码方式
涉及到一些jvm方面的知识,具体的解决方案是在执行java时为jvm规定编码。当我们输入java时可以看到一些参数指令,如下图:
其中的-D参数以键值的形式在启动jvm时规定一些输入参数,在本例子中,需要规定的是编码这一参数,cmd中执行时,只需在java后面加上-Dfile.encoding=utf-8即可
java -Dfile.encoding=utf-8 xxxxxxx
本例中,我们对该方案进行尝试,可以看到,问题得到了解决。(该命令无需在chcp 65001模式中执行)