linux 下vim保存的中文在windows下打开乱码的问题

23 views
Skip to first unread message

王猛猛

unread,
Jul 12, 2011, 10:15:56 PM7/12/11
to vim-cn
在linux上保存的中文文件,从windows上打开会是乱码,必须手动转化为utf-8才可以。有没有什么办法解决这个问题呢?
我的vimrc配置如下。
set fileencodings=utf-8,gb2312,gbk,gb18030

set termencoding=utf-8

set fileformats=unix

set encoding=prc

Jason Jia

unread,
Jul 12, 2011, 10:22:05 PM7/12/11
to vim...@googlegroups.com
encoding不要设置成奇怪的值,这样只会更糟糕。。
推荐使用插件FencView

2011/7/13 王猛猛 <wangj...@gmail.com>
--
要退订此论坛,请发邮件至 Vim-cn-un...@googlegroups.com
更多选项,请通过 http://groups.google.com/group/Vim-cn 访问该论坛

夏凯

unread,
Jul 13, 2011, 1:04:45 AM7/13/11
to vim...@googlegroups.com
enc=prc是什么意思?

> --
> 要退订此论坛,请发邮件至 Vim-cn-un...@googlegroups.com
> 更多选项,请通过 http://groups.google.com/group/Vim-cn 访问该论坛

--
从我的移动设备发送

contact me:
MSN: walk...@gmail.com
GTALK: walk...@gmail.com

Yuk Wong

unread,
Jul 13, 2011, 2:28:29 AM7/13/11
to vim...@googlegroups.com
有set fencs=gbk,utf-8就可以了吧 会自动探测,你乱码的文件是什么编码?

2011/7/13 夏凯 <walk...@gmail.com>

Jacky Liu

unread,
Jul 13, 2011, 4:47:38 AM7/13/11
to vim...@googlegroups.com


2011/7/13 王猛猛 <wangj...@gmail.com>
--
要退订此论坛,请发邮件至 Vim-cn-un...@googlegroups.com
更多选项,请通过 http://groups.google.com/group/Vim-cn 访问该论坛



没记错的话,这个是 utf 文件开头的 BOM 字节造成的问题。

utf 标准没规定文件开头是否一定要有 BOM 字节,具体行为由系统环境决定,因为程序都使用系统提供的文件操作。linux 下保存的 utf8 都有 BOM 字节,windows 下都没有。你在 linux 下保存的 utf 文件换到 windows 下读取时,有的程序比如浏览器和 notepad 两种都能认,而 windows vim 只认一种,就有麻烦,反过来也一样。如果用 notepad 做转换,实际上是 utf8 转到 utf8,只是按照 windows 的习惯删掉开头的 BOM 字节而已。

或许可以写代码搞定,用自动命令触发,每当加载一个新 buffer 的时候都不管三七二十一,先把内容用 python 库解码再编码保存。虽然还是 utf,但是能把 BOM 的规范调整到跟系统一致。这个设想我还没做过,我现在都用 linux 了。



--
http://bluegene8210.is-programmer.com/

依云

unread,
Jul 13, 2011, 5:41:36 AM7/13/11
to vim...@googlegroups.com

是不是使用了非 GBK 范围内的编码导致在 Windows 上 iconv 解码失败所以被认
为不是 UTF-8?

--
Best regards,
lilydjwg

Linux Vim Python 我的博客
http://lilydjwg.is-programmer.com/

依云

unread,
Jul 13, 2011, 6:49:39 AM7/13/11
to vim...@googlegroups.com
On Wed, Jul 13, 2011 at 04:47:38PM +0800, Jacky Liu wrote:
> 2011/7/13 王猛猛 <wangj...@gmail.com>

>
> 没记错的话,这个是 utf 文件开头的 BOM 字节造成的问题。
>
> utf 标准没规定文件开头是否一定要有 BOM 字节,具体行为由系统环境决定,因为程序都使用系统提供的文件操作。linux 下保存的 utf8 都有
> BOM 字节,windows 下都没有。你在 linux 下保存的 utf 文件换到 windows 下读取时,有的程序比如浏览器和 notepad
> 两种都能认,而 windows vim 只认一种,就有麻烦,反过来也一样。如果用 notepad 做转换,实际上是 utf8 转到 utf8,只是按照
> windows 的习惯删掉开头的 BOM 字节而已。
>
> 或许可以写代码搞定,用自动命令触发,每当加载一个新 buffer 的时候都不管三七二十一,先把内容用 python 库解码再编码保存。虽然还是
> utf,但是能把 BOM 的规范调整到跟系统一致。这个设想我还没做过,我现在都用 linux 了。

所谓的一派胡言大约就是这样子的了。Linux 下通常没有 BOM,而微软的产品通常
会有 BOM,因为那是它发明的。另外,不论是什么 OS 上的 Vim,都可以支持有
BOM 和 无 BOM 的,只要有 +nulti_byte 特性。fencs 里第一项可以写 ucs-bom
来让 Vim 识别它。用来控制是否有 BOM 的选项名啊 'bomb'。

另外,我觉得,BOM 和文件尾不加空行一样蛋疼。(比如 cat file1 file2 > file3)

Jacky Liu

unread,
Jul 13, 2011, 6:26:03 AM7/13/11
to vim...@googlegroups.com


2011/7/13 依云 <lily...@gmail.com>

On Wed, Jul 13, 2011 at 04:47:38PM +0800, Jacky Liu wrote:
> 2011/7/13 王猛猛 <wangj...@gmail.com>
>
> 没记错的话,这个是 utf 文件开头的 BOM 字节造成的问题。
>
> utf 标准没规定文件开头是否一定要有 BOM 字节,具体行为由系统环境决定,因为程序都使用系统提供的文件操作。linux 下保存的 utf8 都有
> BOM 字节,windows 下都没有。你在 linux 下保存的 utf 文件换到 windows 下读取时,有的程序比如浏览器和 notepad
> 两种都能认,而 windows vim 只认一种,就有麻烦,反过来也一样。如果用 notepad 做转换,实际上是 utf8 转到 utf8,只是按照
> windows 的习惯删掉开头的 BOM 字节而已。
>
> 或许可以写代码搞定,用自动命令触发,每当加载一个新 buffer 的时候都不管三七二十一,先把内容用 python 库解码再编码保存。虽然还是
> utf,但是能把 BOM 的规范调整到跟系统一致。这个设想我还没做过,我现在都用 linux 了。

所谓的一派胡言大约就是这样子的了。Linux 下通常没有 BOM,而微软的产品通常
会有 BOM,因为那是它发明的。另外,不论是什么 OS 上的 Vim,都可以支持有
BOM 和 无 BOM 的,只要有 +nulti_byte 特性。fencs 里第一项可以写 ucs-bom
来让 Vim 识别它。用来控制是否有 BOM 的选项名啊 'bomb'。

另外,我觉得,BOM 和文件尾不加空行一样蛋疼。(比如 cat file1 file2 > file3)


really? I'm not so sure ... :-)  至少当文件里有中文的时候,看起来都是这种情况下出问题。我对 BOM 支持特性没那么相信。根据经验,我仍然有七成确定是 BOM 的问题。

楼主何不拿乱码的文件和转换过的文件 diff 一下,看看差了些什么,一目了然。

--
http://bluegene8210.is-programmer.com/

夏凯

unread,
Jul 13, 2011, 11:51:37 AM7/13/11
to vim...@googlegroups.com
diff看不出结果,要xxd后再vimdiff
2011/7/13 Jacky Liu <bluege...@gmail.com>:

> really? I'm not so sure ... :-) 至少当文件里有中文的时候,看起来都是这种情况下出问题。我对 BOM
> 支持特性没那么相信。根据经验,我仍然有七成确定是 BOM 的问题。
> 楼主何不拿乱码的文件和转换过的文件 diff 一下,看看差了些什么,一目了然。
--

王猛猛

unread,
Jul 13, 2011, 9:16:53 PM7/13/11
to vim...@googlegroups.com
确实是bom和结尾0a的问题。

在 2011年7月14日 上午12:24,王猛猛 <wang0...@126.com>写道:

确实是bom和结尾0a的问题

Reply all
Reply to author
Forward
0 new messages