1. 問題描述
由於本機的IDEA 2019.1出現了無法連接插件商店和Spring Boot模板的問題,就重裝了了最新的IDEA 2019.2.4版本,使用了一段時間以后,沒有改任何的配置,控制台的中文就莫名其妙的開始亂碼。使用了網上的各種辦法,還是沒有解決。
2. 問題的原因
由於已經試了所有的方法也沒能解決,我看到別人說可能是因為IDEA在安裝目錄和項目的緩存目錄有兩份環境配置,因為如果是項目緩存配置那么即使修改IDEA安裝目錄的配置也無濟於事,緩存目錄配置依舊無法改變,所以亂碼依舊。
根據這個思路,我開始測試到底是哪個地方出現了問題。首先,因為使用了Tomcat,所以可能是Tomcat使用了GBK而IDEA用了UTF-8導致的亂碼,后來添加了程序內控制台輸出也亂碼,所以判定應該不只是Tomcat的問題,而且由於用的是Spring Boot,所以內置的Tomcat配置也不好修改。之后我突發奇想,如果我重新創建一個項目看看會不會亂碼,於是用模板創建了一個Spring Boot項目,測試以后發現不管是Tomcat還是程序內輸出到控制台,都沒有亂碼,我已經確定了就是因為因為緩存配置導致的。
3. 解決辦法
既然已經知道了問題的原因,解決的辦法就有了,清除緩存就可以了。
提示:在操作以下操作之前,請確保IDEA的設置正確,否則亂碼可能會依舊存在。
在IDEA項目中,點擊左上角的File-Invalidate Caches / Restart。
彈出警示框,選擇 Invalidate and Restart。
點擊按鈕之后,IDEA會自動關閉並重啟,如果之前項目很多很大,那么緩存的重建速度將會比較慢。
啟動項目,發現控制台不管是Tomcat輸出還是程序輸出文本都正常了。
4. 其他解決辦法
這些方法就是網友提供的方法,如果實在解決不了,要么熟視無睹,要么重裝IDEA。
(1) 本地Tomcat問題
如果是使用本機的Tomcat,需要修改Tomcat的server.xml文件。
打開Tomcat的安裝目錄,找到conf目錄下的server.xml文件並打開。
找到 protocol="HTTP/1.1" 的標簽,添加 URIEncoding="UTF-8" ,效果如下。
在同目錄下找到 logging.properties 文件,使用文本編輯器打開。
找到 "java.util.logging.ConsoleHandler.encoding",將值修改為 "UTF-8"。
保存並重啟Tomcat即可。
也可以在IDEA里設置,不過更換項目還需要再配置,不方便。
在項目主頁最上面,找到 "Run",選擇 "Edit Configurations..."。
點開左側"Templates",找到"Tomcat Server"-"Local"。
在"VM options"中輸入 -Dfile.encoding=UTF-8 ,選擇Apply保存,重啟Tomcat即可。
(2) Spring內置Tomcat問題
打開項目的 pom.xml ,在<build>中添加plugin,重啟項目即可。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.7.RELEASE</version>
<configuration>
<jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
</configuration>
</plugin>
</plugins>
</build>
(3) IDEA配置問題
打開IDEA安裝目錄下的bin文件夾,找到兩個配置文件:idea.exe.vmoptions和idea64.exe.vmoptions。
用文本編輯器打開這兩個文件,分別在最后一行添加 -Dfile.encoding=UTF-8 。
保存並重啟IDEA即可。
(4) IDEA字符集設置問題
打開IDEA的Settings設置界面,找到 Editor-File Encodings。
將三個下拉欄都設置為"UTF-8",保存並重啟IDEA。