Chinaunix首页 | 论坛 | 博客
  • 博客访问: 224241
  • 博文数量: 42
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 420
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-09 10:55
个人简介

每天改变一点点,生活充满了惊喜。

文章分类

全部博文(42)

文章存档

2016年(8)

2015年(29)

2014年(5)

我的朋友

分类: LINUX

2015-03-19 15:59:56

Linux下使用vim编辑文本,特别是有中文时,经常出现乱码。常受其害,不知其然。
当出现这种情况时,时常经过一番倒腾设置,正常了,但总感觉是在碰运气。
抽时间研究了一些文档、做了一些测试,以下Linux 、 vim、XShell 环境下UTF-8编码为例,描述下自己的一些理解。

首先,乱码出现的原因,简单的说是文本的字符编解码不一致导致的。
例如:文件使用GBK编码保存,打开时使用UTF-8编码,则必然是乱码。因为GBK 和 UTF-8 使用的编解码规则不一样。
要详细了解字符编码的原理,可以参考这篇文章:
http://blog.jobbole.com/84903/

要做到打开文件后,在终端XShell不出现乱码,需要考虑以下几个方面:
文本自身的编码方式
vim编辑器的编码方式
Linux操作系统的语言环境
XShell终端的解码方式

vim可以在.vimrc配置文件中写入以下配置项来设置编码:
set fileencodings=utf-8,gbk
经过上面的设置,当使用vim打开文本时,就会使用fileencodings指定的编码方式列表去逐一探测文本的编码方式,
并设置fileencoding项为探测到的,fileencoding(注意和fileencodings的区别配置项示当前编辑的文本的编码方式
vim在保存文件时也会使用该编码方式。要注意一点,vim自动探测字符编码的机制不是100%有效的。

如果不设置上面的配置项,vim会默认使用Linux的locale,locale用于设置Linux操作系统的语言环境,
用locale命令可以查看当前操作系统的语言环境,如果不是UTF-8编码,用下面的命令修改:
export LC_ALL="zh_CN.utf-8"
如果不想每次都修改,可以把上面的命令行写入.bashrc文件。
经过设置后,用vim打开文本时,fileencoding值就是utf-8。

根据上面的描述,如果文档使用vim编辑文档并保存后,文档就保存为fileencoding指定的编码方式。
而如果是新建文档,使用
fileencodings指定的编码方式列表的第一个值。

经过上面的设置后,在终端XShell上看到的可能仍是乱码,还是不一致的问题。
vim输出字符到终端采用的是termencoding指定的编码方式,termencoding默认值为空,即传输到终端不做编码转换。
那么OK了,两种解决方法,
要么修改termencoding值与终端的字符展示方式一致,要么修改终端的字符展示方式为utf-8。当然这里肯定推荐后者。

总结:
文中采用的是比较常用的方式,毕竟utf-8在Linux操作系统下是比较常用的字符编码方式,如果要设置为其他字符编码方式也是类似的。
解决字符乱码的问题的方法很多,重要的一点是要保持字符的编解码一致,而且要知道在哪个环节,是哪种字符编码方式在起作用。
还有就是需要了解下字符编码的规则和原理,处理这类问题就能游刃有余了。



阅读(3829) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~