作了這麼長時間的java開發,可是,你知道JVM是以怎樣的編碼加載、解析class文件的嗎?java
咱們知道,一般狀況下,咱們會將java文件的字符集修改爲utf-8,這樣,理所固然地就認爲:JVM在加載class的時候,天然是按照utf-8進行解析的。tomcat
事實並不是如此:JVM加載class文件默認採用的字符集,是由操做系統來決定的。工具
換句話說,JVM會根據操做系統的字符集來解析你的class文件,而不是智能的去判斷你的class文件的字符集而進行解析。開發工具
這樣,確定有問題。編碼
以win7/win10中文操做系統爲例,咱們藉助開發工具以utf-8將java文件編譯成class文件,而解析的時候卻以GBK的編碼加載到JVM中,不出問題纔怪!spa
可是,問題偏偏就出如今了這裏,一直都是以utf-8進行編譯,以gbk進行解析,中文也沒有出現亂碼問題,至於爲何,我沒有想通。操作系統
今天的重點不在這裏,重點是,咱們怎麼讓JVM以utf-8的格式解析class文件?日誌
方案一:設置環境變量blog
快捷鍵:win+r--》輸入sysdm.cpl-->回車--》高級--》環境變量--》系統變量--》新建utf-8
變量名設置爲:JAVA_TOOL_OPTIONS
變量值設置爲: -Dfile.encoding=UTF-8
肯定便可。
方案二:修改tomcat
路徑:{TOMCAT_HOME}/bin/catalina.bat
打開該文件,在有對JAVA_OPS設置的地方,添加代碼
:設置JVM以utf-8格式解析class文件 set "JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8"
從新啓動tomcat便可。
注意:若是你像上面那樣修改爲utf-8後,重啓後的tomcat,日誌確定亂碼。
由於Tomact日誌字符集採用的是gbk,java強制將gbk轉換成utf-8後,形成亂碼是天然的事情了。
位置:{TOMCAT_HOME}/conf/logging.properties文件
#指定tomcat日誌字符集 java.util.logging.ConsoleHandler.encoding = GBK
修改爲功後,日誌便再也不亂碼。
提醒:在Windows下,在黑窗口使用命令對java文件進行編譯且沒有指定字符集的前提下,編譯時默認採用的也是gbk的編碼,與java文件自己的字符集無關。