加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_汕头站长网 (https://www.0754zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

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

发布时间:2022-11-08 12:51:45 所属栏目:Linux 来源:
导读:  我们很多时候需要将windows下编辑好的的一些文件上传到linux服务器,windows下的默认字符编码格式是GBK(gb2312)而在Linux下基本默认的都是utf-8,这时就可能出现文件名或者文件内容乱码的问题,这个其实挺令人
  我们很多时候需要将windows下编辑好的的一些文件上传到linux服务器,windows下的默认字符编码格式是GBK(gb2312)而在Linux下基本默认的都是utf-8,这时就可能出现文件名或者文件内容乱码的问题,这个其实挺令人头疼的。今天就来说说如何在linux系统下面查看文件编码,以及如何转换文件编码格式、如何解决文件名乱码问题。
 
  首先在windows下面我有这样一个文件:
 
  我把它上传到linux服务器上查看内容:
 
  结果是中文全部乱码~~
 
  如何查看文件的编码集?
 
  vi该文件,然后按ESC进如入命令行模式linux编码,输入: 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编码的中文文件已经有七万多个汉字了,甚至包含了少数民族文字。
 

(编辑:云计算网_汕头站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!