在linux上处理中文的时候,特别是自然语言这种频繁读写中文到文件的情况,经常会出错,下面梳理总结一下。常用相关编码有:文件编码,文件内容编码,终端编码,标准输入输出流编码,操作系统编码。

常出问题的是文件编码与文件内容编码,有时候这两个不一致会导致导入时,解码出错,可用vim设置:set fileencoding=xxx修改文件编码。对于批量文件编码修改,可用convmv工具(非系统自带,一般需要安装)

导致文件编码与文件内容编码不一致的原因:

在数据流写入文件时,会从fileencodings去逐个读取,如果发现某个编码能正常解析当前文件流,即当作该编码,设置文件编码为这个编码;如果没有找到合适的编码,那么文件编码就会被设置为空。在写文件的时候,经常会因为没有设置fileencodings变量,而导致文件编码为空。

解决办法是:在写入文件,如用iconv转码时,先set fileencodings=xxx,xxxx ,在操作写入文件,这能从根本上解决问题。

问题影响:文件编码和文件内容编码不一致,会导致在文件处理的时候解析异常。比如用python处理中文,读取文件时,会默认以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基因的青年,少了折腾,心里怎么会爽,因此不用这种工具,是上策(用原始方法能更深入理解操作系统编码的原理,又能解决问题,又能涨姿势,多好~)

linux 中文编码环境,linux中文编码问题总结相关推荐

  1. linux文件管理环境,linux教程环境搭建,基本命令及文件管理

    linux教程 入门概述 环境搭建 开机关机基本目录介绍 基本命令 目录管理 文件属性查看和修改学习 基本属性 linux教程 这个课程基于CentOS 7版本学习 JAVA全栈开发的linux,不是 ...

  2. linux桌面环境知乎,24 个值得尝试的 Linux 桌面环境 | Linux 中国

    我全要! (本文字数:2014,阅读时长大约:3 分钟) Linux 桌面的最大优点之一是它提供给用户选择的权利.如果你不喜欢你屏幕左下角的应用程序菜单,你可以移除它.如果你不喜欢你的文件管理器组织文 ...

  3. 怎么查看自己linux实验环境,Linux实验

    满意答案 kepan2011 2014.01.04 采纳率:53%    等级:11 已帮助:4699人 实验报告 实验名称: Linux观察行为 实验时间: 年 月 日 实验人员: (姓名) (学号 ...

  4. linux适应环境,Linux从入门到适应(一):VSCode C++环境配置

    作为在Windows环境下习惯使用Visual Studio IDE的人,对于Linux环境下的Vim编辑使用十分难受,虽然网上很多人说vim非常牛逼和强大,但是我更加习惯于使用VS code的界面, ...

  5. linux还原环境,Linux环境利用恢复被rm意外删除数据文件

    Linux环境下不小心在操作系统误rm删除数据文件后,在没有重启数据库或者操作系统的情况下可以利用操作系统句柄恢复.[@more@]1.数据库版本信息: SQL> select * from v ...

  6. deepin linux 桌面环境,Linux Deepin 新桌面环境的目标

    问:Linux 用户到底需要什么样子的操作系统? 对于这个问题,或许一千个人会有一千多个不同的回答,如 GNOME 项目目前在做着"平板和智能手机"方向的努力. Linux Dee ...

  7. Linux mono环境,linux+mono+xsp+apache搭建asp.net环境

    linux+mono+xsp+apache搭建asp.net环境 发布时间:2020-10-09 18:20:35 来源:51CTO 阅读:3101 作者:huilinux 环境: 系统:centos ...

  8. linux jsp 环境,Linux系统Jsp的环境:Apache,Tomcat配置

    RedHat Linux 9.0 2.所需软件 Apache 2.0.54 下载地址 下载该文件httpd-2.0.54.tar.gz Tomcat5.5.9 下载地址 下载该文件jakarta-to ...

  9. Linux发布环境,linux发布环境初始化脚本

    #参数配置 homeDir=$(pwd) tomcatDir=$homeDir/tomcat logDir=$homeDir/tomcat/logs backUpDir=$homeDir/backup ...

最新文章

  1. 外媒炒作中国黑客入侵美保险公司 并无相关证据
  2. echarts图表大小随着外部div大小变化
  3. R语言观察日志(part7)--RMarkdwon之代码块
  4. python 爬虫 标签文本beautifullsoup_【Python爬虫】学习BeautifulSoup
  5. 如何给SAP Cloud Connector Region列表中添加新的Region
  6. webshell提权教程linux,Linux下WEBSHELL提权
  7. mysql netcdf_Linux下用Intel编译器编译安装NetCDF-Fortan库(4.2以后版本)
  8. 苹果新品又要来了 下周可能推出AirPods Studio
  9. qt web混合编程_VS2017+QT 混合编程-在VS控制台程序配置QT
  10. MORMOT的数据序列
  11. 微信ipad协议源码
  12. Hotdog 热狗大战
  13. 新计算机c盘太小,电脑C盘太小,F盘太大,怎么重新调整分区容量?
  14. Electron构建魔兽世界插件更新安装
  15. 笔记本显卡和台式显卡区别介绍
  16. [ctfshow]web入门——文件上传(web156-web163)
  17. 收藏夹导出至html,分享win7电脑中三种导出浏览器收藏夹地址方法
  18. 基于bp的神经网络算法,bp神经网络是什么算法
  19. php twig if,php – twig:如果有多个条件
  20. 配置apache和nginx的tomcat负载均衡

热门文章

  1. 仿 vue-cli 搭建属于自己的脚手架
  2. 面试题:判断链表是否存在环
  3. html5学习笔记——html保留标签(一)
  4. 在Magento首页显示新产品怎么设置
  5. android系统如何自适应屏幕大小
  6. perl语言中的AWK之基础篇
  7. TCP/IP及内核参数优化调优(转)
  8. unittest----assert断言的使用
  9. sql server 碎片整理——DBCC SHOWCONTIG
  10. Exp3:MAL_免杀原理与实践