vim 字符编码设置 及 修改编码


原文地址:http://www.cnblogs.com/freewater/archive/2011/08/26/2154602.htmlhtml

参考文章:linux

linux下查看文件编码及修改编码
vim


vim 编码方式的设置
和全部的流行文本编辑器同样,Vim 能够很好的编辑各类字符编码的文件,这固然包括UCS-二、UTF-8 等流行的 Unicode 编码方式。然而不幸的是,和不少来自 Linux 世界的软件同样,这须要你本身动手设置。 
Vim 有四个跟字符编码方式有关的选项,encoding、fileencoding、fileencodings、termencoding (这些选项可能的取值请参考 Vim 在线帮助 :help encoding-names),它们的意义以下: 
* encoding: Vim 内部使用的字符编码方式,包括 Vim 的 buffer (缓冲区)、菜单文本、消息文本等。默认是根据你的locale选择.用户手册上建议只在 .vimrc 中改变它的值,事实上彷佛也只有在.vimrc 中改变它的值才有意义。你能够用另一种编码来编辑和保存文件,如你的vim的encoding为utf-8,所编辑的文件采用cp936编码,vim会自动将读入的文件转成utf-8(vim的能读懂的方式),而当你写入文件时,又会自动转回成cp936(文件的保存编码). 
* fileencoding: Vim 中当前编辑的文件的字符编码方式,Vim 保存文件时也会将文件保存为这种字符编码方式 (不论是否新文件都如此)。 
* fileencodings: Vim自动探测fileencoding的顺序列表, 启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式,而且将 fileencoding 设置为最终探测到的字符编码方式。所以最好将Unicode 编码方式放到这个列表的最前面,将拉丁语系编码方式 latin1 放到最后面。 
* termencoding: Vim 所工做的终端 (或者 Windows 的 Console 窗口) 的字符编码方式。若是vim所在的term与vim编码相同,则无需设置。如其否则,你能够用vim的termencoding选项将自动转换成term的编码.这个选项在 Windows 下对咱们经常使用的 GUI 模式的 gVim 无效,而对 Console 模式的Vim 而言就是 Windows 控制台的代码页,而且一般咱们不须要改变它。 
好了,解释完了这一堆容易让新手犯糊涂的参数,咱们来看看 Vim 的多字符编码方式支持是如何工做的。 
1. Vim 启动,根据 .vimrc 中设置的 encoding 的值来设置 buffer、菜单文本、消息文的字符编码方式。 
2. 读取须要编辑的文件,根据 fileencodings 中列出的字符编码方式逐一探测该文件编码方式。并设置 fileencoding 为探测到的,看起来是正确的 (注1) 字符编码方式。 
3. 对比 fileencoding 和 encoding 的值,若不一样则调用 iconv 将文件内容转换为encoding 所描述的字符编码方式,而且把转换后的内容放到为此文件开辟的 buffer 里,此时咱们就能够开始编辑这个文件了。注意,完成这一步动做须要调用外部的 iconv.dll(注2),你须要保证这个文件存在于 $VIMRUNTIME 或者其余列在 PATH 环境变量中的目录里。 
4. 编辑完成后保存文件时,再次对比 fileencoding 和 encoding 的值。若不一样,再次调用 iconv 将即将保存的 buffer 中的文本转换为 fileencoding 所描述的字符编码方式,并保存到指定的文件中。一样,这须要调用 iconv.dll因为 Unicode 可以包含几乎全部的语言的字符,并且 Unicode 的 UTF-8 编码方式又是很是具备性价比的编码方式 (空间消耗比 UCS-2 小),所以建议 encoding 的值设置为utf-8。这么作的另外一个理由是 encoding 设置为 utf-8 时,Vim 自动探测文件的编码方式会更准确 (或许这个理由才是主要的 ;)。咱们在中文 Windows 里编辑的文件,为了兼顾与其余软件的兼容性,文件编码仍是设置为 GB2312/GBK 比较合适,所以 fileencoding 建议设置为 chinese (chinese 是个别名,在 Unix 里表示 gb2312,在 Windows 里表示cp936,也就是 GBK 的代码页)。 windows

对于fedora来讲,vim的设置通常放在/etc/vimrc文件中,不过,建议不要修改它。能够修改~/.vimrc文件(默认不存在,能够本身新建一个),写入所但愿的设置。编辑器

个人.vimrc文件以下:工具

: set  encoding=utf-8
: set  fileencodings=ucs-bom,utf-8,cp936
: set  fileencoding=gb2312
: set  termencoding=utf-8

其中,fileencoding配置能够设置utf-8,可是个人mp3好像不支持utf-8编码,因此干脆,我就设置为gb2312了。如今搞定了,不论是vi中仍是mp3上均可以显示无乱码的.txt文件了。编码


查看文件编码
Linux中查看文件编码能够经过如下几种方式:
1.在Vim中能够直接查看文件编码
:set fileencoding
便可显示文件编码格式。
若是你只是想查看其它编码格式的文件或者想解决用Vim查看文件乱码的问题,那么你能够在
~/.vimrc 文件中添加如下内容:

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

这样,就可让vim自动识别文件编码(能够自动识别UTF-8或者GBK编码的文件),其实就是依照 fileencodings提供的编码列表尝试,若是没有找到合适的编码,就用latin-1(ASCII)编码打开。
2. enca (若是你的系统中没有安装这个命令,能够用sudo yum install -y enca 安装 )查看文件编码
$ enca filename
filename: Universal transformation format 8 bits; UTF-8
CRLF line terminators
须要说明一点的是,enca对某些GBK编码的文件识别的不是很好,识别时会出现:
Unrecognized encoding

文件编码转换
1.在Vim中直接进行转换文件编码,好比将一个文件转换成utf-8格式
:set fileencoding=utf-8

2. enconv 转换文件编码,好比要将一个GBK编码的文件转换成UTF-8编码,操做以下
enconv -L zh_CN -x UTF-8 filename

3. iconv 转换,iconv的命令格式以下:
iconv -f encoding -t encoding inputfile
好比将一个UTF-8 编码的文件转换成GBK编码
iconv -f UTF-8 -t GBK file1 -o file2spa

查看文件编码file命令
file ip.txt ip.txt: UTF-8 Unicode text, with escape sequences
1、利用iconv命令进行编码转换文件内容编码转换 iconv命令用于转换指定文件的编码,默认输出到标准输出设备,亦可指定输出文件。 用法: iconv [选项...] [文件...] 有以下选项可用: 输入/输出格式规范: -f, --from-code=名称 原始文本编码 -t, --to-code=名称 输出编码 信息: -l, --list 列举全部已知的字符集 输出控制: -c 从输出中忽略无效的字符 -o, --output=FILE 输出文件 -s, --silent 关闭警告 --verbose 打印进度信息 -?, --help 给出该系统求助列表 --usage 给出简要的用法信息 -V, --version 打印程序版本号 例子: iconv -f utf-8 -t gb2312 aaa.txt >bbb.txt 这个命令读取aaa.txt文件,从utf-8编码转换为gb2312编码,其输出定向到bbb.txt文件。
2、文件名编码转换
由于如今用linux,原来在windows里的文件都是用GBK编码的。因此copy到linux下是乱码,文件内容能够用iconv来转换但是好多中文的文件名仍是乱码,找到个能够转换文件名编码的命令,就是convmv。
convmv命令详细参数 例如
convmv -f GBK -t UTF-8 *.mp3
不过这个命令不会直正的转换,你能够看到转换先后的对比。若是要直正的转换要加上参数 --notest
convmv -f GBK -t UTF-8 --notest *.mp3
-f 参数是指出转换前的编码,-t 是转换后的编码。这个千万不要弄错了。否则可能仍是乱码哦。还有一个参数颇有用。就是 -r 这个表示递归转换当前目录下的全部子目录。
* 须要安装 convmv-1.10-1.el5.noarch.rpm 
3、 更好的傻瓜型命令行工具enca,它不但能智能的识别文件的编码,并且还支持成批转换。   1.安装    $sudo apt-get install enca    2.查看当前文件编码    enca -L zh_CN ip.txt Simplified Chinese National Standard; GB2312   Surrounded by/intermixed with non-text data    3.转换   命令格式以下    $enca -L 当前语言 -x 目标编码 文件名    例如要把当前目录下的全部文件都转成utf-8    enca -L zh_CN -x utf-8 * 检查文件的编码 enca -L zh_CN file     将文件编码转换为"UTF-8"编码  enca -L zh_CN -x UTF-8 file 若是不想覆盖原文件能够这样 enca -L zh_CN -x UTF-8 < file1 > file2