在windows下使用vim,写了一个很简单的程序test.cpp,输出一段字符,比如"test.这是一个test"。然后用devC++/bin/中的g++在dos下命令行编译,运行结果输出的汉字部分全是乱码!

在这之前,我用vim打开我的一个文本时,有乱码,我已经把fileencoding和fileencodings都做了设置。打开文本的乱码已经解决了。

用ultraedit打开test.cpp发现状态栏里显示test.cpp是一个UTF-8 dos格式的文本。windows的内码又是gb18030,出现乱码也就不奇怪了。

现在就是想办法让通过vim创建gb18030而不是unicode的文件。那么如何才能控制vim产生gb18030的文件呢?

---------------------------------

1. Vim 启动,根据 .vimrc 中设置的 encoding 的值来设置 buffer、菜单文本、消息文的字符编码方式。 
2. 读取需要编辑的文件,根据 fileencodings 中列出的字符编码方式逐一探测该文件编码方式。并设置 fileencoding 为探测到的,看起来是正确的字符编码方式。 
3. 对比 fileencoding 和 encoding 的值,若不同则调用 iconv 将文件内容转换为 encoding 所描述的字符编码方式,并且把转换后的内容放到为此文件开辟的 buffer 里,此时我们就可以开始编辑这个文件了。注意,完成这一步动作需要调用外部的 iconv.dll,你需要保证这个文件存在于 $VIMRUNTIME 或者其他列在 PATH 环境变量中的目录里。 
4. 编辑完成后保存文件时,再次对比 fileencoding 和 encoding 的值。若不同,再次调用 iconv 将即将保存的 buffer 中的文本转换为 fileencoding 所描述的字符编码方式,并保存到指定的文件中。同样,这需要调用 iconv.dll

---------------------------------

原来vim中设置字符的有四个参数:encoding, fileencoding, fileencodings, termencoding。在vim内全部使用encoding指定的字符集,不是的话就用iconv.dll来调整,这么说来,encoding用的是什么字符集,那么用vim创建的文件就是什么字符集了。

打开_vimrc,set encoding=gb18030。保存,vim打开一个文件,发现出错。再改set encoding=gbk。保存,vim打开一个文件,正常了。

最后重写一个test.cpp,编译、运行,中文显示出来了。

 

Posted on 2009-05-14 13:17  joneykk  阅读(229)  评论(0)    收藏  举报