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

Linux字符集及亂碼處理 html

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

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

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

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

關於字符集的優秀文檔連接

https://wenku.baidu.com/view/1f476aea9ec3d5bbfd0a746a.html

相關文章
相關標籤/搜索