常年Eclipse的守舊派久聞IDEA大名,終於在dalao的安利下入了IDEA的坑((纔不是由於能夠用翻譯插件html
入坑一段時間,由於在編碼方面瞭解的還算比較多,平時基本沒遇到過亂碼問題,而且在第一次使用IDEA時就修改了設置中全部編碼方式爲UTF-8,直到最近作一個小小的javaweb項目,遇到了很奇怪的問題,平時本人都保持使用UTF-8的習慣,各類編輯器都是默認UTF-8編碼,此次出問題的是兩個html文檔與兩個js腳本,均爲UTF-8編碼,在本地使用瀏覽器打開時一切正常,可是放到IDEA中,加上設置請求與響應的編碼的過濾器後,在瀏覽器中打開頁面上的中文居然亂碼了,肯定這個問題存在的時候實在很是詫異,在仔細檢查過本身的各類設置,代碼以及文件編碼後確信沒有問題,經過瀏覽器中的開發者工具能夠看到AJAX請求獲得的響應數據中的中文是正常的,只是html與js這兩種靜態資源亂碼了,嘗試去掉設置編碼的過濾器後,更神奇的事出現了,html與js的再也不亂碼了,可是經過AJAX請求獲得的響應數據中的中文卻又亂碼了(崩潰)。java
在作了各類排查後實在不知道問題發生在哪裏,因而猜想會不會是運行環境的問題(JDK10.0.2 + Tomcat9.0.11),當把運行環境換爲(JDK1.8_171 + Tomcat8.5)後,啓用設置編碼的過濾器,亂碼問題居然奇蹟般的消失了。web
因而只能將這個問題暫時歸結爲環境問題或者是這個項目有問題了。。ajax
晚上吃飯回來,從新建了個項目,用的疑似有問題的環境,一步一步當心的從新創建了以前這個項目的結構,編譯,運行,仍是老樣子,html與js亂碼,ajax響應正常,因而開始瘋狂百度,終於在一位前輩的博客中看到了類似的問題:瀏覽器
前輩的解決分三步:app
File-->Settings-->Editor-->File Encodings編輯器
將這三個地方都設置成UTF-8,使文件的編碼格式都是UTF-8(不過這個貌似跟Tomcat亂碼沒多大關係)工具
在設置了Tomcat的VM選項後,靜態資源亂碼的問題消失了,根據對這個參數的只知其一;不知其二,我的認爲是:Tomcat是運行在JVM的基礎上,所以受JVM參數的影響,因爲個人系統是Win7簡體中文版,系統默認編碼爲GBK,所以JVM在不指定這個選項的狀況下,也將讀取系統默認編碼做爲本身的默認編碼,Tomcat則使用此默認編碼做爲讀取普通資源文件時的默認編碼,這就致使了個人UTF-8格式的html與js文件被Tomcat以二進制讀取並使用GBK進行了錯誤解碼獲得亂碼字符文件,隨後又經過UTF-8編碼解碼將這堆亂碼呈現到了瀏覽器。學習
根據上述猜測進行實驗,將個人html文件保存爲GBK編碼格式,js保持UTF-8不變,去掉這個VM選項,啓動Tomcat,果真,html文檔顯示正常,經過開發者工具查看加載的js文件,裏面的中文仍然是亂碼,所以能夠確定,Tomcat 9中默認處理靜態資源的Servlet使用了JVM提供的默認編碼來讀取了靜態資源,經過VM選項指定文件編碼爲UTF-8後便可解決這個問題。編碼
安裝目錄\bin下,加破解補丁時的那兩個文件(32/64)(*.vmoptions),就是用來爲IDEA的啓動指定VM選項的,在這兩個文件中也加上這行,啓動,運行,完美!一切亂碼都消失了~
經過此次的亂碼問題,也算是獲得了一點經驗,在往後的學習中,凡是基於JVM運行的程序,若是須要統一編碼,都要儘可能加上這行VM選項,從而保證不會出現莫名其妙的亂碼問題,在設置了這個選項 後也要注意將軟件中有關編碼的設置一併統一,以避免出現其餘問題。
-Dfile.encoding=UTF-8