linux下tomat自動啟動引發的中文亂碼問題探討
阿新 • • 發佈:2019-01-28
前幾天剛總結一片博文《設定tomcat自動啟動》,以為tomcat 在Windows/Linux下作為服務自動啟動的問題很好的解決了。不想,UAT環境發現MYSQL資料庫中文亂碼問題,排查了一翻,發現直接到tomcat安裝目下/bin下面呼叫startup.sh啟動,不會產生中文亂碼問題,而改為服務方式啟動tomcat,則會產生。
考慮到MYSQL的字符集設定沒變化(設定為GBK編碼),程式碼也沒變化,應該Tomcat字符集的讀取有問題。在網上查了大半天,發現兩種解決問題的辦法:
(1)修改/etc/rc.d/rc.loca指令碼,在腳本里新增export LC_ALL = zh_CN.GBK, 重啟計算機。試驗後無效。其實,在嘗試該方法前,可用locale命令檢視系統設定的語言選項;
(2)修改catalina.sh指令碼,在這裡我是編輯/etc/init.d/tomcat$port($port是我的tomcat埠號,看過《設定tomcat自動啟動 tomcat自動啟動》你會懂的),新增export CATALINA_OPTS=-Dfile.encoding=GBK;嘗試後,問題解決。
export CATALINA_HOME=/prog/tomcat/$port
export JAVA_HOME=/prog/jdk1.6.0_22
export CATALINA_PID=/prog/tomcat/$port/conf/catalina.pid
export CATALINA_OPTS=-Dfile.encoding=GBK
結論:
(1)Linux下手動啟動tomcat和自動啟動(包括封裝成服務啟動)所取的字符集設定不同;
(2)自動啟動必須指定JVM的字符集編碼,且和資料庫的字符集保持一致
但是,為什麼要指定呢?這個問題還待解決。
請高手指點。謝謝!
考慮到MYSQL的字符集設定沒變化(設定為GBK編碼),程式碼也沒變化,應該Tomcat字符集的讀取有問題。在網上查了大半天,發現兩種解決問題的辦法:
(1)修改/etc/rc.d/rc.loca指令碼,在腳本里新增export LC_ALL = zh_CN.GBK, 重啟計算機。試驗後無效。其實,在嘗試該方法前,可用locale命令檢視系統設定的語言選項;
(2)修改catalina.sh指令碼,在這裡我是編輯/etc/init.d/tomcat$port($port是我的tomcat埠號,看過《設定tomcat自動啟動
export CATALINA_HOME=/prog/tomcat/$port
export JAVA_HOME=/prog/jdk1.6.0_22
export CATALINA_PID=/prog/tomcat/$port/conf/catalina.pid
export CATALINA_OPTS=-Dfile.encoding=GBK
結論:
(1)Linux下手動啟動tomcat和自動啟動(包括封裝成服務啟動)所取的字符集設定不同;
(2)自動啟動必須指定JVM的字符集編碼,且和資料庫的字符集保持一致
但是,為什麼要指定呢?這個問題還待解決。
請高手指點。謝謝!