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
关于字符集的优秀文档连接