Linux中java log輸出中文亂碼
阿新 • • 發佈:2018-12-12
比如這樣一段程式碼:
logger.debug("中文亂碼?Chinese");
輸出結果是這樣的:
2016-06-12 10:24:46,130:DEBUG main (CleanupTaskTest.java:27) - ?????Chinese
執行locale命令看一下結果:
- [[email protected] logs]# locale
- LANG=
- LC_CTYPE="POSIX"
- LC_NUMERIC="POSIX"
- LC_TIME="POSIX"
- LC_COLLATE="POSIX"
- LC_MONETARY="POSIX"
- LC_MESSAGES="POSIX"
- LC_PAPER="POSIX"
- LC_NAME="POSIX"
- LC_ADDRESS="POSIX"
- LC_TELEPHONE="POSIX"
- LC_MEASUREMENT="POSIX"
- LC_IDENTIFICATION="POSIX"
- LC_ALL=
幾個主要變數的意思:
1. LC_COLLATE:定義該環境的排序和比較規則
2. LC_CTYPE:用於字元分類和字串處理,控制所有字元的處理方式,包括字元編碼,字元是單位元組還是多位元組,如何列印等。是最重要的一個環境變數。
3. LC_MONETARY:貨幣格式
4. LC_NUMERIC:非貨幣的數字顯示格式
5. LC_TIME:時間和日期格式
6. LC_MESSAGES:提示資訊的語言。另外還有一個LANGUAGE引數,它與LC_MESSAGES相似,但如果該引數一旦設定,則LC_MESSAGES引數就會失效。LANGUAGE引數可同時設定多種語言資訊,如
LANGUANE=”zh_CN.GB18030:zh_CN.GB2312:zh_CN”。
7. LANG:LC_*的預設值,是最低級別的設定,如果LC_*沒有設定,則使用該值。類似於 LC_ALL。
8. LC_ALL:它是一個巨集,如果該值設定了,則該值會覆蓋所有LC_*的設定值。注意,LANG的值不受該巨集影響。
解決方法:
把LC_CTYPE修改為“zh_CN.UTF-8”:
cd
vi .bashrc
新增:
export LANG='POSIX' export LC_CTYPE='zh_CN.UTF-8'
生效:source .bashrc
- [[email protected] ~]# locale
- LANG=POSIX
- LC_CTYPE=zh_CN.UTF-8
- LC_NUMERIC="POSIX"
- LC_TIME="POSIX"
- LC_COLLATE="POSIX"
- LC_MONETARY="POSIX"
- LC_MESSAGES="POSIX"
- LC_PAPER="POSIX"
- LC_NAME="POSIX"
- LC_ADDRESS="POSIX"
- LC_TELEPHONE="POSIX"
- LC_MEASUREMENT="POSIX"
- LC_IDENTIFICATION="POSIX"
- LC_ALL=
再試,就可以了:
2016-06-12 10:32:11,960:DEBUG main (CleanupTaskTest.java:27) - 中文亂碼?Chinese