windows/tomcat 修改java虛擬機JVM以utf-8字符集加載class文件的兩種方式


1.情景展示

  做了這么長時間的java開發,但是,你知道JVM是以怎樣的編碼加載、解析class文件的嗎?

  我們知道,通常情況下,我們會將java文件的字符集修改成utf-8,這樣,理所當然地就認為:JVM在加載class的時候,自然是按照utf-8進行解析的。

  事實並非如此:JVM加載class文件默認采用的字符集,是由操作系統來決定的。

  換句話說,JVM會根據操作系統的字符集來解析你的class文件,而不是智能的去判斷你的class文件的字符集而進行解析。

  這樣,肯定有問題。

2.原因分析

  以win7/win10中文操作系統為例,我們借助開發工具以utf-8將java文件編譯成class文件,而解析的時候卻以GBK的編碼加載到JVM中,不出問題才怪!

  但是,問題恰恰就出現在了這里,一直都是以utf-8進行編譯,以gbk進行解析,中文也沒有出現亂碼問題,至於為什么,我沒有想通。

  今天的重點不在這里,重點是,我們怎么讓JVM以utf-8的格式解析class文件?

3.解決方案

  方案一:設置環境變量

  快捷鍵:win+r--》輸入sysdm.cpl-->回車--》高級--》環境變量--》系統變量--》新建

  變量名設置為: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文件本身的字符集無關。

 

寫在最后

  哪位大佬如若發現文章存在紕漏之處或需要補充更多內容,歡迎留言!!!

 相關推薦:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM