Linux字符集及亂碼處理 html
一、字符(Character)是各類文字和符號的總稱,包括各國家文字、標點符號、圖形符號、數字等。字符集(Character set)是多個字符的集合,字符集種類較多,每一個字符集包含的字符個數不一樣,常見字符集名稱:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等 linux
[root@localhost ~]# echo $LANG #LANG爲字符集的環境變量名稱 shell
en_US.UTF-8 vim
[root@localhost ~]# env|grep LANG #env命令查看系統的環境變量 windows
LANG=en_US.UTF-8 編輯器
[root@localhost ~]# export|grep LANG #export命令用於將shell變量或函數輸出爲環境變量 函數
declare -x LANG="en_US.UTF-8" 編碼
[root@localhost ~]# locale #Get locale-specific information 列出當前區域設置環境LANG=en_US.UTF-8 #指定全部與locale有關的變量的默認值 spa
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" #響應信息主要是提示信息,錯誤信息,狀態信息,標題,標籤,按鈕和菜單等
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" #自身包含信息元數據信息
LC_ALL=
LC_CTYPE(字符辨識編碼)表示這個系統的系統如今使用的字符集是en_US.UTF-8
1)、直接設置變量的方式修改,命令以下兩條命令:
[root@localhost ~]# LANG=xxx 或者 export LANG=xxx;
[root@localhost ~]# LC_ALL="xxx" 或者 export LC_ALL="xxx";
注:xxx爲欲修改成的字符集
查看標準的字符集的方法,locale –a命令,經常使用的有zh_CN.GB23十二、zh_CN.GB18030或者zh_CN.UTF-八、en_US.UTF-8等
可是上述修改方式只會在當前shell中生效,新建shell此環境變量消失。
故平時登陸系統執行"LANG= "這個命令的時候顯示的就沒有亂碼的緣故,意思就是取消了字符集的顯示,取消字符集還能夠執行[root@david ~]# unset LANG這個命令。
2)、修改文件方式,經過修改/etc/sysconfig/i18n文件控制
[root@localhost ~]# vim /etc/sysconfig/i18n
LANG=" en_US.UTF-8 " 系統的語言
SYSFONT="lat0-sun16"
修改文件保存退出以後要生效要執行以下命令纔可生效
[root@localhost ~]$ source /etc/sysconfig/i18n
四、vim編輯器與編碼相關:
1)fileencoding,用於配置打開文件和保存文件的編碼,但只能有一個值,只適合少數文件都是同種編碼的環境,因此通常不使用
2)fileencodings, 從名字上看就知道是fileencoding的加強版,能夠配置多種不一樣的編碼,常見的配置爲,配置好以後,列表中的文本編碼只要合法,都能被vim正確 的讀取,建議配置:set fileencodings=utf-bom,utf-8,gbk,gb2312,gb18030,cp936,latin1
3)encoding,vim內部編碼,vim讀取文件以後,但並不以讀取文件的編碼來處理,而是會轉換成內部編碼的格式,這個編碼通常與操做系統相關,linux下utf-8居多,中文windows下則是gdk,建議配置:set encoding=utf-8
4)termencoding,vim輸出的編碼,輸出指輸出到操做系統或命令終端等,默認與操做系統的語言編碼一致,若是使用linux命令終端,建議終端和linux系統配置相同的編碼,而後配置相同的termencoding,不然顧全了vim就顧不上shell,不過若是shell不存在中文名文件,則配置終端和 termencoding一致便可,對於windows,能自動的識別gbk和utf-8,不用特殊配置,建議配置:set termencoding=utf-8
5)fileformats,用於區分操做系統,主要是回車\r\n的區別,建議配置:set fileformats=unix,dos
常見的亂碼有如下幾種情形
(1)將windows環境下的文件rz到linux下時文件出現亂碼
解決方案:1.在rz以前使用notepad++將文件格式轉化爲UTF-8無BOM格式或者ANSI編碼格式;2.set encoding=utf-8;
(2)secureCRT或者xterm2編輯環境中出現亂碼,只需在會話選項中調節字符編碼爲GB2312或者UTF-8
(3)當對日誌文件進行vim編輯時出現亂碼,大多數狀況下是由於日誌文件的格式爲GB2312。
解決方案:1.set encoding=GB2312;2若是方案1不起做用的話,調整secureCRT或者xterm2的編輯環境爲GB2312
(4)wget下載文件名亂碼
解決方案:通常狀況下加上–restrict-file-names=nocontrol,例如wget --restrict-file-names=nocontrol -m www.xxx.com/
(5)cat文件正常,vim文件不正常
解決方案:
a.直接寫入/etc/vim/vimrc ,最後一行加上
修改內容爲 set fileencodings=ucs-bom,utf-8,gbk,gb2312,latin1
set fileencoding=gb2312
set termencoding=utf-8
b.進行轉碼iconv -f gb2312 -t utf-8 19.txt
批量文件轉碼命令iconv -c -f gbk -t utf-8 $data_path/$item_uv
參考來源:
https://www.linuxidc.com/Linux/2014-03/97777.htm
https://blog.csdn.net/wusuopubupt/article/details/50947243
關於字符集的優秀文檔連接