先說一下現象:瀏覽器顯示中文是亂碼。
為什麼會顯示亂碼呢。
首先:亂碼頁面對應的是一個html檔案,並且html檔案也是用的utf-8格式的編碼,並且檔案內容顯示正常,無中文亂碼問題;
其次:通過如下操作修改瀏覽器編碼,無論如何始終都是亂碼
排除了B(browser)端問題,那就應該是S(server)端的問題了,接下來就通過SSH Secure Shell Client工具登入上linux伺服器,找到應用的部署目錄,並找到對應的那個html檔案,使用vi開啟一開,是亂碼,找到問題了,檔案本身就是亂碼,瀏覽器上顯示亂碼就不奇怪了。接下來開始解決問題,索性,我就把本地的顯示正常的檔案通過SSH Secure File Transfer Client工具上傳到伺服器上並覆蓋掉原來的html檔案,開啟瀏覽器,重新登入,查看,居然還是亂碼。
趕快開啟伺服器上的html檔案,發現跟原來一樣:中文全部顯示亂碼。難道沒有替換成功。重新剛才的替換操作,同時使用ll命令查看html檔案詳細資料,最後修改時間跟目前時間完全一致,確定是被我本地的檔案替換過了,結果開啟瀏覽器,一樣是亂碼,再到伺服器上查看html還是亂碼!
思考:應該是作業系統環境的問題,作業系統應該不支援中文。帶著這個懷疑查看了作業系統的相關資訊,結果如下:
# lsb_release -a
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch
Distributor ID: RedHatEnterpriseServer
Description: Red Hat Enterprise Linux Server release 6.5 (Santiago)
Release: 6.5
Codename: Santiago
#vi /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
查看預設顯示的字元編碼,發現:
# echo $LANG
en_US.UTF-8
找到問題了。修改/etc/sysconfig/i18n檔案內容為:
# vi /etc/sysconfig/i18n
#LANG="en_US.UTF-8"
#SYSFONT="latarcyrheb-sun16"
LANG="zh_CN.GB18030"
LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"
SYSFONT="lat0-sun16"
再次進行操作:
# echo $LANG
zh_CN.GB18030
重新把本地的檔案上傳到伺服器上替換掉原來的老檔案,vi開啟,中文顯示正常,開啟瀏覽器,查看,亂碼問題解決。
這裡有個很小的插曲:修改完如上配置後,我用vi開啟那個檔案時,中文是正常的,但是用cat查看卻仍然是亂碼。解決方案很簡單,即修改用戶端工具SSH Secure Shell Client編碼即可,如下圖所示:
原因是:cat是根據用戶端工具的編碼來顯示內容的,而vi是根據伺服器的編碼來顯示內容的。
結論:其實作業系統是支援中文的,只是配置不當導致無法顯示中文。將系統語言改為:LANG=zh_CN.UTF-8也可以。
要查看系統支援的語言,可以使用如下命令查看:locale -a。
如果以後發現其他中文亂碼問題,可以如法炮製即可。