Linux學習之十一-Linux字符集及亂碼處理
Linux字符集及亂碼處理
1、字符(Character)是各種文字和符號的總稱,包括各國家文字、標點符號、圖形符號、數字等。字符集(Character set)是多個字符的集合,字符集種類較多,每個字符集包含的字符個數不同,常見字符集名稱:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等
- 字符集在系統中體現形式是一個環境變量,查看當前系統終端采用的字符集的方式
[root@localhost ~]# echo $LANG #LANG為字符集的環境變量名稱
en_US.UTF-8
[root@localhost ~]# env|grep LANG #env命令查看系統的環境變量
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有關的變量的默認值
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.GB2312、zh_CN.GB18030或者zh_CN.UTF-8、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
4、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
關於字符集的優秀文檔鏈接
https://wenku.baidu.com/view/1f476aea9ec3d5bbfd0a746a.html
Linux學習之十一-Linux字符集及亂碼處理