vim 写入错误,转换失败 (请将 'fenc' 置空以强制执行)

转载 2015年07月09日 13:56:36

转载:http://forum.ubuntu.org.cn/viewtopic.php?p=2498184


代码:
set fenc=
就好了.
参考:
引用:
vim里面的编码主要跟三个参数有关:enc(encoding), fenc(fileencoding)和fencs(fileencodings)

其中fenc是当前文件的编码,也就是说,一个在vim里面已经正确显示了的文件(前提是你的系统环境跟你的enc设置匹配),你可以通过改变 fenc后再w来将此文件存成不同的编码。比如说,我:set fenc=utf-8然后:w就把文件存成utf-8的了,:set fenc=gb18030再:w就把文件存成gb18030的了。这个值对于打开文件的时候是否能够正确地解码没有任何关系。

fencs就是用来在打开文件的时候进行解码的猜测列表。文件编码没有百分百正确的判断方法,所以vim只能猜测文件编码。比如我的vimrc里面这个的设置是

set fileencodings=utf-8,gb18030,utf-16,big5

所以我的vim每打开一个文件,先尝试用utf-8进行解码,如果用utf-8解码到了一半出错(所谓出错的意思是某个地方无法用utf-8正确地解码),那么就从头来用gb18030重新尝试解码,如果gb18030又出错(注意gb18030并不是像utf-8似的规则编码,所以所谓的出错只是说某个编码没有对应的有意义的字,比如0),就尝试用utf-16,仍然出错就尝试用big5。这一趟下来,如果中间的某次解码从头到尾都没有出错,那么 vim就认为这个文件是这个编码的,不会再进行后面的尝试了。这个时候,fenc的值就会被设为vim最后采用的编码值,可以用:set fenc?来查看具体是什么。

至于enc,其作用基本只是显示。不管最后的文件是什么编码的,vim都会将其转换为当前系统编码来进行处理,这样才能在当前系统里面正确地显示出来,因此enc就是干这个的。在windows下面,enc默认是cp936,这也就是中文windows的默认编码,所以enc是不需要改的。在 linux下,随着你的系统locale可能设为zh_CN.gb18030或者zh_CN.utf-8,你的enc要对应的设为gb18030或者 utf-8(或者gbk之类的)。


自己来总结一下吧:

1.如果系统的locale是zh_CN的,那么想让vim能显示正确的编码,在 .vimrc 中设置: 

set enc=gbk
set fencs=utf-8,gbk

这样,vim会先探测utf-8的编码,失败了会作为gbk的编码进行解码。显示当然是gbk了,这个和locale相关。

2.查看当前文件的编码: 

:set fenc


3.vim中转换编码:

:set fenc=utf8

然后保存即可。

4.如果已经打开了解码错的文件,想重新设置编码格式:

:edit ++enc=utf8


5.shell转换编码:
将一个GBK 编码的文件转换成UTF-8编码
iconv -f gbk -t utf8 file1 -o file2

批量转换文件的编码 :

find . -name '*.txt' -exec iconv -f gbk -t utf8 {} -o tmp.txt \; -exec mv tmp.txt {} \;

注:打开UTF-8编码的文件时,除了vim里的设置,还需要正确SecureCRT,详情请看我的另一篇文章《关于SecureCRT中的2个中文问题》

vim编码设置方法

vim里面的编码主要跟三个参数有关:enc(encoding), fenc(fileencoding)和fencs(fileencodings)。括号里面的是全写,外面的是简写。其中fenc是当前文件...
  • JQ_AK47
  • JQ_AK47
  • 2016年06月27日 17:26
  • 6241

E513: write error, conversion failed (make 'fenc' empty to override)"解决办法

今天在FreeBSD上调试代码时,突然我的jar出现了这个错误!上网找了好多资料没有找到解决的办法,后来问同事才解决 了这个问题!(*^__^*) 嘻嘻……     问题:E513: wr...
  • robby_chan
  • robby_chan
  • 2013年08月01日 13:09
  • 3172

vim编码方式的设置

前两天在VIM编辑py文件的时候 保存的时候,出现这样的错误   E513: write error, conversion failed (make 'fenc' empty to overr...
  • pxinm
  • pxinm
  • 2016年08月04日 12:40
  • 861

vi 不能写入 转换失败

vi 不能写入 转换失败 Q: 1)通常在非中文编码方式的文本中输入中文后,vi不能保存文件.错误信息如下: test.txt" 不能写入 -- 转换失败 请按 ENTER 或其它命令继续...
  • u014237185
  • u014237185
  • 2014年05月04日 11:12
  • 862

vim 写入错误,转换失败 (请将 'fenc' 置空以强制执行)

vim里面的编码主要跟三个参数有关:enc(encoding), fenc(fileencoding)和fencs(fileencodings) 其中fenc是当前文件的编码,也就是说,一个在v...
  • github_34457546
  • github_34457546
  • 2018年01月23日 10:31
  • 43

undefined reference to错误的解决方法

陈运文 Linux下编译程序时,经常会遇到“undefined reference to XXX” 报错,这里总结一些可能的原因和解决方案,给需要的朋友: 说道undefined reference ...
  • cserchen
  • cserchen
  • 2010年04月19日 17:44
  • 137689

打造自己的 Python 编码环境

趁着放假,重新配置了一下自己的Mac的编程环境,毕竟新年新气象嘛,主要是iTerm2、Zsh、vim 优化、Consolas字体、NoisyTyper,这些的相关配置。工欲利其事必先利其器,好的编码环...
  • sun2728
  • sun2728
  • 2016年03月24日 11:33
  • 614

DB2命令总汇

DB2常用命令汇总之一 db2 -tvf my.sqldb2level 显示db2的版本号显示SQL出错信息db2 "? sql6031"db2mtrk 管理DAS产生:root运行-dascrt -...
  • zwhfyy
  • zwhfyy
  • 2006年04月12日 11:43
  • 27562

vi 出现 E509: 无法创建备份文件 (请加 ! 强制执行)

擦,我的vi每次w时都提示 “E509: 无法创建备份文件 (请加 ! 强制执行)” 愁死我了,最后请朋友帮忙解决的,原来是在用户目录(自己的目录/home/[你的用户名]/)下缺少文件夹 .vim...
  • zhangzhenhu
  • zhangzhenhu
  • 2011年11月16日 10:14
  • 4589

vi 输入中文保存提示“不能进行转换”的问题

a. 由于在windows下默认是gb编码,而我的vim默认是utf-8(gedit默认也是utf-8),所以打开会成乱码。修改了一下配置文件,使vi支持gb编码就好了。#vi ~/.vimrclet...
  • kailan818
  • kailan818
  • 2011年06月29日 16:29
  • 1480
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:vim 写入错误,转换失败 (请将 'fenc' 置空以强制执行)
举报原因:
原因补充:

(最多只允许输入30个字)