起因
我們小組有兩位同學,在此次個人編程作業中,和我一樣都采用了Java作為編程語言,但他們都遇到了問題:
- A同學的程序在IDEA里跑的結果和cmd里跑jar的結果不一致
- B同學的程序在IDEA里能跑,在cmd里直接跑不動
解決思路
同樣的開發方式,為什么他們出現了問題,而我沒有???
我開始找CSDN、博客園啥的...
- 開始我懷疑是打包方式有問題,可我用了無數種打包方式后,於事無補
- 我覺得可能跟jar包運行方式有關系,我決定直接運行編譯文件,發現結果一樣,問題仍然沒解決
怎么辦呢???
我突然想起來,無論是eclipse還是IDEA這樣的IDE,他們運行Java程序,本質就是集成了各種命令行語句,最多自動添加了一些參數
"C:\Program Files\Java\jdk-11.0.1\bin\java.exe" -Dvisualvm.id=3207379397174 "-javaagent:D:\IntelliJ IDEA 2020.1.3\lib\idea_rt.jar=55578:D:\IntelliJ IDEA 2020.1.3\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\97845\Desktop\Subjects\軟工實踐\others_projects\031802245\out\production\project1 com.RoseZ.Main D:\sim_0.8\orig.txt D:\sim_0.8\orig_0.8_rep.txt D:\project1\src\com\RoseZ\answer\ans9.txt
如果我模仿他的參數可不可以呢?說不定它的參數有優化!但我發現了javaagent
,可能是Java程序運行代理,會不會跟原生Java程序運行不一樣,又把我搞懵了,突然又覺得進死胡同了。
我決定放眼國外,用StackOverflow!
編碼問題!!!我想起來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
還是有問題,那為什么我的就可以呢?
后來我在我的代碼中發現了這個:
原來我早就在代碼中指定好UTF-8的編碼格式了!在讀入txt文本時,我就在轉換后的String構造方法中,確認了它的charset!
推薦
Java中String字符編碼(CharSet)轉換的相關問題的一個集合
總結
- 第一次個人編程作業是處理文本的問題,需要時刻關注編碼問題,很重要,特別是我們還是處理的中文文本
- 面向Google,懂的都懂