最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

关于Linux下的文件编码问题解决

XAMPP案例 中文小张 196浏览 0评论

我们很多时候需要将windows下编辑好的的一些文件上传到linux服务器,windows下的默认字符编码格式是GBK(gb2312)而在Linux下基本默认的都是utf-8,这时就可能出现文件名或者文件内容乱码的问题,这个其实挺令人头疼的。今天就来说说如何在linux系统下面查看文件编码,以及如何转换文件编码格式、如何解决文件名乱码问题。

首先在windows下面我有这样一个文件:
我把它上传到linux服务器上查看内容:
结果是中文全部乱码~~

如何查看文件的编码集?

vi该文件,然后按ESC进如入命令行模式,输入: set fileencoding回车就可以看到当前文件的字符编码格式了

可以看到这个文件的编码格式为latin1:

Linux系统默认的字符编码为UFT-8,而这个文件为latin1,所以会产生乱码的问题。

如何解决?

1、如果只是想通过vim查这个编码格式的文件内容,那么可以这样做:

# vim ~/.vimrc

加入如下内容:

set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936

这样,就可以让vim自动识别文件编码(可以自动识别UTF-8或者GBK编码的文件),其实就是依照 fileencodings提供的编码列表尝试,如果没有找到合适的编码,就用latin-1(ASCII)编码打开。我们再用vi打开下刚刚的文件试试:

文件内容已经可以正常显示。

2、上面的方法只是在vim的时候可以看到正常的内容,文件本身的编码格式其实还是latin1,不信可以cat看一下:
想要彻底改变这个文件的编码,就需要转换该文件的编码了,转换编码格式有下面几个方法:

使用iconv将GBK转成UFT-8

命令格式:iconv -f 原编码-t 目标编码 要转换的文件名 -o 指定生成的文件名

# iconv -f GBK -t UTF-8 python隐藏诗.txt -o python隐藏诗-1.txt

使用enca(如果没有这个命令,请安装enca:yum install enca -y)

格式: enca -L 当前语言 -x 目标编码 文件名

# enca -L zh_CN -x UTF-8 python隐藏诗.txt

关于中文文件名的乱码
1、首先连接主机的属性中选择UFT-8而不是默认语言

2、如果是使用xftp工具传输,最好把“使用UTF-8编码”勾选上

3、保证你的系统是支持中文语言(zh_CN)的,可以通过locale查看

如果没有,请安装下面的包
CentOS6:

# yum groupinstall chinese-support

CentOS7:

# yum groupinstall “fonts”

# yum install kde-l10n-Chinese

# yum reinstall glibc-common

4、如果批量上传的文件中还是有部分乱码,请参考下面的解决方法
# yum install convmv -y

# convmv -f GBK -t UTF-8 *.docx                 //这个命令可以看到转换前后的对比。如果要直正的转换要加上参数 –notes

# convmv -f GBK -t UTF-8 –notest *.docx  //-f 参数是指转换前的编码,-t 是转换后的编码。还可以使用 -r 这个参数,表示递归转换当前目录下的所有子目录。

关于ASCII、GB2312、GBK、GB18030

它们的兼容性关系是GB18030兼容GBK,GBK兼容GB2312,GB2312兼容ASCII。所谓兼容,你可以简单理解为子集、不冲突的关系。例如GB2312编码的文件中可以出现ASCII字符,GBK编码的文件中可以出现GB2312和ASCII字符,GB18030编码的文件可以出现GBK、GB2312、ASCII字符。下面是每种编码方式的特点:

ASCII:每个字符占据1bytes,用二进制表示的话最高位必须为0(扩展的ASCII不在考虑范围内),因此ASCII只能表示128个字

GB2312:最早一版的中文编码,每个字占据2bytes。由于要和ASCII兼容,那这2bytes最高位不可以为0了(否则和ASCII会有冲突)。在GB2312中收录了6763个汉字以及682个特殊符号,已经囊括了生活中最常用的所有汉字。

GBK:由于GB2312只有6763个汉字,我汉语博大精深,只有6763个字怎么够?于是GBK中在保证不和GB2312、ASCII冲突(即兼容GB2312和ASCII)的前提下,也用每个字占据2bytes的方式又编码了许多汉字。经过GBK编码后,可以表示的汉字达到了20902个,另有984个汉语标点符号、部首等。值得注意的是这20902个汉字还包含了繁体字。

GB18030:GBK的两万多字也已经无法满足我们的需求了,还有更多可能你自己从来没见过的汉字需要编码。这时候显然只用2bytes表示一个字已经不够用了(2bytes最多只有65536种组合,然而为了和ASCII兼容,最高位不能为0就已经直接淘汰了一半的组合,只剩下3万多种组合无法满足全部汉字要求)。因此GB18030多出来的汉字使用4bytes编码。当然,为了兼容GBK,这个四字节的前两位显然不能与GBK冲突(实操中发现后两位也并没有和GBK冲突)。我国在2000年和2005年分别颁布的两次GB18030编码,其中2005年的是在2000年基础上进一步补充。至此,GB18030编码的中文文件已经有七万多个汉字了,甚至包含了少数民族文字。

转载请注明:XAMPP中文组官网 » 关于Linux下的文件编码问题解决