在linux環境下操做,常常遇到中文亂碼的狀況,下面整理下本身遇到問題的解決思路:java
出現位置:tomcat日誌;linux
出現效果:中文顯示問號:shell
解決思路:數據庫
一、輸入echo $LANG打印當前使用的系統語言,或輸入locale直接查看所有:tomcat
LANG=en_US.UTF-8 // LC_*的默認值,是最低級別的設置,若是LC_*沒有設置,則使用該值。相似於 LC_ALL。
LC_CTYPE="en_US.UTF-8" //用於字符分類和字符串處理,控制全部字符的處理方式,包括字符編碼,字符是單字節仍是多字節,如何打印等。是最重要的一個環境變量
LC_NUMERIC="en_US.UTF-8" // 非貨幣的數字顯示格式
LC_TIME="en_US.UTF-8" // 時間和日期格式
LC_COLLATE="en_US.UTF-8" //環境的排序和比較規則
LC_MONETARY="en_US.UTF-8" // 貨幣格式
LC_MESSAGES="en_US.UTF-8" //提示信息的語言。另外還有一個LANGUAGE參數,它與LC_MESSAGES類似,但若是該參數一旦設置,則LC_MESSAGES參數就會失效。LANGUAGE參數可同時設置多種語言信息,如LANGUANE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"。
LC_PAPER="en_US.UTF-8" //默認紙張尺寸大小
LC_NAME="en_US.UTF-8" //姓名書寫方式
LC_ADDRESS="en_US.UTF-8" //地址書寫方式
LC_TELEPHONE="en_US.UTF-8" //電話號碼書寫方式
LC_MEASUREMENT="en_US.UTF-8" //度量衡表達方式
LC_IDENTIFICATION="en_US.UTF-8" //對locale自身包含信息的概述
LC_ALL= //它是一個宏,若是該值設置了,則該值會覆蓋全部LC_*的設置值。注意,LANG的值不受該宏影響。服務器
若是沒有須要安裝,須要下載安裝。編碼
(1)、安裝全部與中文支持相關的包日誌
# yum -y groupinstall chinese-support排序
(2)、修改字符編碼配置文件字符串
# vi /etc/sysconfig/i18n
修改後內容以下:
LANG="zh_CN.UTF-8"
SUPPORTED="zh_CN:zh:en_US.UTF-8:en_US:en:zh_CN.GB18030"
SYSFONT="latarcyrheb-sun16"
區分en_US.UTF-8與zh_US.UTF-8,分別默認顯示爲英文和中文模式。
二、排除系統語言後,查看終端的設置:
例如xshell,屬性>終端>編碼一項,是否設置爲Uncod(UTF-8)
三、上述都沒有問題後,考慮tomcat自身的設置:
在tomcat>bin>catalina.sh(window環境查看catalina.bat)文件中,echo "Using CATALINA_BASE: $CATALINA_BASE"前面加上:
JAVA_OPTS="$JAVA_OPTS -Djavax.servlet.request.encoding=UTF-8 -Dfile.encoding=UTF-8 -Duser.language=zh_CN -Dsun.jnu.encoding=UTF-8"
從新啓動tomcat,再觀察日誌的中文顯示狀況
四、上述都操做事後仍是存在中文問題,那麼就要考慮項目自己,例如:
(1)數據庫的編碼;
(2)打包前請檢查文件的編碼;
上述操做沒有順序,可根據猜想去試圖查看。操做中,比較支持在同一步驟相同環境下多個項目或服務器比對的方式,找到問題的速度會更快...