linux服務器的字符集設置可能影響到網站頁面出現 “???” 等問號亂碼,還有可能導致文件中的漢字部分出現亂碼。有兩個原因
- 服務器沒有安裝 zh_CN.UTF-8 字符集,導致不支持中文!
- 服務器雖然裝了 zh_CN.UTF-8 字符集,但是未設置成系統默認的字符集
查看 linux 安裝的字符集
運行命令
locale -a
結果
C
C.UTF-8
POSIX
安裝 zh_CN.UTF-8 字符集
# 安裝 locales
apt-get install locales# 安裝 zh_CN.UTF-8 字符集
cd /usr/share/locales
sudo ./install-language-pack zh_CN.UTF-8
查看當前 Linux 字符集
# 執行這個命令,查看和語言編碼有關的環境變量
locale
顯示如下:
LANG=
LANGUAGE=en_US:en
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=
可以看到大多數都默認為POSIX 類型的,這時可以改服務器的默認字符集為zh_CN.UTF-8(我測試過改了沒問題哦,可以解決漢字亂碼問題。如果能通過設置SecureCrt等終端可以解決的話,就沒必要改了)
除了使用 locale 之外,還可以使用下列命令查看當前的字符集
1、# echo $LANG2、# env |grep LANG3、# export |grep LANG
設置當前 Linux 字符集
方法1:
vi /etc/sysconfig/i18n# 默認為:
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"# 修改為:
LANG="zh_CN.UTF-8"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh"
SYSFONT="latarcyrheb-sun16"
然后在不重啟的情況下重新加載i18n文件
source /etc/sysconfig/i18n
方法2:
vi /etc/profileexport LC_ALL="zh_CN.UTF-8"
export LANG="zh_CN.UTF-8"
方法3:可是化修改
dpkg-reconfigure locales # 此命令會進入界面
在界面中,選中en_US.UTF-8和zh_CN.UTF-8 (點擊空格鍵 為選中),然后tab鍵選中,回車鍵確認;進入最終確認頁面,顯示選中的編碼,tab鍵選中,回車鍵確認。完成。
修改完顯示
# 運行loacle
LANG=zh_CN.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=zh_CN.UTF-8
locale 詳解
字段
1、 語言符號及其分類(LC_CTYPE)
2、 數字(LC_NUMERIC)
3、 比較和排序習慣(LC_COLLATE)
4、 時間顯示格式(LC_TIME)
5、 貨幣單位(LC_MONETARY)
6、 信息主要是提示信息,錯誤信息, 狀態信息, 標題, 標簽, 按鈕和菜單等(LC_MESSAGES)
7、 姓名書寫方式(LC_NAME)
8、 地址書寫方式(LC_ADDRESS)
9、 電話號碼書寫方式(LC_TELEPHONE)
10、度量衡表達方式(LC_MEASUREMENT)
11、默認紙張尺寸大小(LC_PAPER)
12、對locale自身包含信息的概述(LC_IDENTIFICATION)。
理解locale的設置
設定locale就是設定12大類的locale分類屬性,即 12個LC_*。除了這12個變量可以設定以外,為了簡便起見,還有兩個變量:LC_ALL和LANG。
它們之間有一個優先級的關系:LC_ALL > LC_* > LANG
可以這么說,LC_ALL是最上級設定或者強制設定,而LANG是默認設定值。