1. 程式人生 > >Linux學習之十一-Linux字符集及亂碼處理

Linux學習之十一-Linux字符集及亂碼處理

gin tails 讀取 文件 latin1 style ESS 自身 win

Linux字符集及亂碼處理

1、字符(Character)是各種文字和符號的總稱,包括各國家文字、標點符號、圖形符號、數字等。字符集(Character set)是多個字符的集合,字符集種類較多,每個字符集包含的字符個數不同,常見字符集名稱:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等

  1. 字符集在系統中體現形式是一個環境變量,查看當前系統終端采用的字符集的方式

[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. 修改字符集的方式

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字符集及亂碼處理