解决jar包在cmd里运行和IDE里运行不一致问题

起因

我们小组有两位同学,在此次个人编程作业中,和我一样都采用了Java作为编程语言,但他们都遇到了问题:

  • A同学的程序在IDEA里跑的结果和cmd里跑jar的结果不一致
  • B同学的程序在IDEA里能跑,在cmd里直接跑不动

解决思路

同样的开发方式,为什么他们出现了问题,而我没有???

我开始找CSDN、博客园啥的...

  • 开始我怀疑是打包方式有问题,可我用了无数种打包方式后,于事无补
  • 我觉得可能跟jar包运行方式有关系,我决定直接运行编译文件,发现结果一样,问题仍然没解决

怎么办呢???


我突然想起来,无论是eclipse还是IDEA这样的IDE,他们运行Java程序,本质就是集成了各种命令行语句,最多自动添加了一些参数

"C:Program FilesJavajdk-11.0.1injava.exe" -Dvisualvm.id=3207379397174 "-javaagent:D:IntelliJ IDEA 2020.1.3libidea_rt.jar=55578:D:IntelliJ IDEA 2020.1.3in" -Dfile.encoding=UTF-8 -classpath C:Users97845DesktopSubjects软工实践others_projects31802245outproductionproject1 com.RoseZ.Main D:sim_0.8orig.txt D:sim_0.8orig_0.8_rep.txt D:project1srccomRoseZanswerans9.txt

如果我模仿他的参数可不可以呢?说不定它的参数有优化!但我发现了javaagent,可能是Java程序运行代理,会不会跟原生Java程序运行不一样,又把我搞懵了,突然又觉得进死胡同了。

我决定放眼国外,用StackOverflow

sof

编码问题!!!我想起来Windows的编码好像默认是GBK,我不知道JVM是不是和OS有关系,但可以肯定的是,在cmd中跑Java程序肯定不是utf-8。而在上面的参数中我们可以看到IDEA的默认编码是UTF-8!!!

最后问题得到了成功解决!下面是运行方式:

## 原来异常的运行方式(常规操作)
java -jar main.jar orig.txt orig_0.8_add.txt ans.txt

## 应该这样
java -Dfile.encoding=utf-8 -jar main.jar orig.txt orig_0.8_add.txt ans.txt

还是有问题,那为什么我的就可以呢?

后来我在我的代码中发现了这个:

code

原来我早就在代码中指定好UTF-8的编码格式了!在读入txt文本时,我就在转换后的String构造方法中,确认了它的charset!

推荐

Java中String字符编码(CharSet)转换的相关问题的一个集合

总结

  • 第一次个人编程作业是处理文本的问题,需要时刻关注编码问题,很重要,特别是我们还是处理的中文文本
  • 面向Google,懂的都懂
原文地址:https://www.cnblogs.com/qizong007/p/13691461.html