1. 程式人生 > >Linux中java log輸出中文亂碼

Linux中java log輸出中文亂碼

比如這樣一段程式碼:

logger.debug("中文亂碼?Chinese");
輸出結果是這樣的:

2016-06-12 10:24:46,130:DEBUG main (CleanupTaskTest.java:27) - ?????Chinese

執行locale命令看一下結果:

  1. [[email protected] logs]# locale
  2. LANG=
  3. LC_CTYPE="POSIX"
  4. LC_NUMERIC="POSIX"
  5. LC_TIME="POSIX"
  6. LC_COLLATE="POSIX"
  7. LC_MONETARY="POSIX"
  8. LC_MESSAGES="POSIX"
  9. LC_PAPER="POSIX"
  10. LC_NAME="POSIX"
  11. LC_ADDRESS="POSIX"
  12. LC_TELEPHONE="POSIX"
  13. LC_MEASUREMENT="POSIX"
  14. LC_IDENTIFICATION="POSIX"
  15. 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

  1. [[email protected] ~]# locale
  2. LANG=POSIX
  3. LC_CTYPE=zh_CN.UTF-8
  4. LC_NUMERIC="POSIX"
  5. LC_TIME="POSIX"
  6. LC_COLLATE="POSIX"
  7. LC_MONETARY="POSIX"
  8. LC_MESSAGES="POSIX"
  9. LC_PAPER="POSIX"
  10. LC_NAME="POSIX"
  11. LC_ADDRESS="POSIX"
  12. LC_TELEPHONE="POSIX"
  13. LC_MEASUREMENT="POSIX"
  14. LC_IDENTIFICATION="POSIX"
  15. LC_ALL=
再試,就可以了:

2016-06-12 10:32:11,960:DEBUG main (CleanupTaskTest.java:27) - 中文亂碼?Chinese