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

linux 中文编码环境,linux中文编码问题总结

发布时间:2022-09-29 14:55:50 所属栏目:Linux 来源:
导读:  在linux上处理中文的时候,特别是自然语言这种频繁读写中文到文件的情况,经常会出错,下面梳理总结一下。常用相关编码有:文件编码,文件内容编码,终端编码,标准输入输出流编码,操作系统编码。

  常出
  在linux上处理中文的时候,特别是自然语言这种频繁读写中文到文件的情况,经常会出错,下面梳理总结一下。常用相关编码有:文件编码,文件内容编码,终端编码,标准输入输出流编码,操作系统编码。
 
  常出问题的是文件编码与文件内容编码,有时候这两个不一致会导致导入时,解码出错,可用vim设置:set fileencoding=xxx修改文件编码。对于批量文件编码修改,可用convmv工具(非系统自带,一般需要安装)
 
  导致文件编码与文件内容编码不一致的原因:
 
  在数据流写入文件时,会从fileencodings去逐个读取,如果发现某个编码能正常解析当前文件流,即当作该编码,设置文件编码为这个编码;如果没有找到合适的编码,那么文件编码就会被设置为空。在写文件的时候,经常会因为没有设置fileencodings变量,而导致文件编码为空。
 
  解决办法是:在写入文件,如用iconv转码时,先set fileencodings=xxx,xxxx ,在操作写入文件,这能从根本上解决问题。
 
  问题影响:文件编码和文件内容编码不一致,会导致在文件处理的时候解析异常。比如用python处理中文,读取文件时linux编码,会默认以fileencoding的编码打开,如果这个编码不对,在脚本中,要decode的时候就会挂掉,即便文件内容的编码是正确的。如:文件内容编码是utf-8,而文件编码是gb18030,python以gb18030打开文件,这时候,文件内容已经编码异常了。。然后用decode('utf-8')时,抛出UnicodeDecodeError,接着一脸蒙x。。
 
  下面总结下常用的转码方式:
 
  文件内容编码用iconv 转码即可,用法就是iconv -f [原编码] -t [目标编码] file -o outfile 。需要注意的时,有时候文件里会有个别编码错误的字节,导致后续内容转码失败,对这种情况,只要加上-c参数即可,也就是iconv -f [原编码] -t [目标编码] -c file -o outfile
 
  查看文件编码,可以用file命令,加参数-bi可获得更精确的编码,但是file查看的编码经常不准确,注意此坑。对应单个的也可以用vim的encoding命令查看
  
  操作系统编码看环境变量LANG
 
  在用python处理文件时,统一用unicode编码处理。对于字符串,从文件读入内存时,会先按照文件编码转到标准输入流编码,所以处理中文字符串时,可用str.decode(sys.stdin.encoding)解码到Unicode,可解决中文字符串的编码问题
 
  中文显示异常问题:
 
  经常在用vim打开文件时,中文会乱码,导致文件乱码的一般是文件编码,文件内容编码,vim编码,iterm/scurecrt/其他终端 的编码不一致,把这三个编码修改成一样的就可以了
 
  当然,这么复杂的工序,很多同学都蒙了,人民群众的力量是无穷的,需求就是用来解决的,这不,有个传说中的工具enca,可以智能识别编码,以及批量编码转化,具体使用,可以查找相关wiki或博客,有很多介绍。。。不。过。作为有geek基因的青年,少了折腾,心里怎么会爽,因此不用这种工具,是上策(用原始方法能更深入理解操作系统编码的原理,又能解决问题,又能涨姿势,多好~)
 

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

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