[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: gvim的问题,一个gb2312编码的文本文件,当locale为zh-CN.utf-8时用vim打开是乱码



这个从GBK到UTF-8编码转换的过程是vim内部实现,还是要借助外部程序?
如果在windows下,记得vim会自动寻找iconv.dll的动态库进行转换,debian下呢?



----- Original Message ----- 
From: "amateur" <ztl.post@gmail.com>
To: <debian-chinese-gb@lists.debian.org>
Sent: Thursday, November 16, 2006 2:32 PM
Subject: Re: gvim的问题,一个gb2312编码的文本文件,当locale为zh-CN.utf-8时用vim打开是乱码


On Wed, Nov 15, 2006 at 01:03:59PM +0800, neno wrote:
> ~/.vimrc加入
> set fencs=utf-8,gbk
这一行的作用是告诉 vim,打开一个文件时,尝试 utf8,gbk 两种编码,vim 只
需要扫描文件的前一段,就可以根据文件里面的数据判断出文件是否用的是
utf8 或者 gbk 编码。如果不指定这一行,则 vim 只会用当前编码 (locale) 
来打开文件,因为你的 locale 是 UTF-8,而文件是 gbk,所以打开是乱码。



> 试试
>   ----- Original Message ----- 
>   From: jun yu 
>   To: debian-chinese-gb@lists.debian.org 
>   Sent: Wednesday, November 15, 2006 12:59 PM
>   Subject: gvim的问题,一个gb2312编码的文本文件,当locale为zh-CN.utf-8时用vim打开是乱码
> 
> 
>   gvim的问题,一个gb2312编码的文本文件,当locale为zh-CN.utf-8时用gvim打开是乱码,但是为什么当我在gvim用set encoding命令设为gb2312时这个文件显示还是乱码?
> 
>   另外在xfce4-terminal 里,不管我设置locale为什么时,用vim打开那个gb2312文件则都是乱码。是因为和terminal有关系吗?但是我执行ls命令的时候可以看到中文文件名啊。
> 
>   对这个中文化问题实在是有点弄不清哈。-------------------------
首先,terminal 必须能够显示中文,这是 vim 显示中文的前提,因为 vim 的
显示是依赖于 terminal 的;其次,即使 terminal 能够显示中文,vim 也必须
能够正确的识别文件的编码才能将文件正确的显示出来。比如说一个文件的内容是:
你好,world.
假如这个文件使用 gb2312 编码的,则其二进制内容为:0xAABBCCDDEEFF..,
vim 读取这个文件时,读取的就是 0xAABBCCDDEEFF..,如果 vim 将这个二进制
码解释成 gbk 编码,则 vim 会根据你当前 terminal 的编码 (UTF-8) 和 文件
编码 (GBK) 作一个转换,将 gbk 的编码 0xAABBCCDDEEFF.. 转换成 UTF-8 的
编码 0xXXYYZZEE...,并将转换后的二进制码送到 terminal 显示,由于
0xXXYY... 对应于 UTF8 编码的 "你好,world.",所以 terminal 可以正常显
示。如果 vim 不知道文件的编码是 gbk,则它认为文件的编码就是 utf8,这样
就没有一个从 gbk->utf8 的转换过程,所以 terminal 接收到的二进制码就是
0xAABBCCDDEEFF..,故 terminal 将这个二进制码当作 utf8 编码来索引字体文
件,得到的就是稀奇古怪的中文字了,肯定就不是 "你好,world."了。

不知道这个解释有没有让你有所理解中文化的原理。

-- 
《游子吟》
作者:孟郊
慈母手中线,游子身上衣。
临行密密缝,意恐迟迟归。
谁言寸草心,报得三春晖。


Reply to: