我该如何使用vim将文件转换为utf8编码?

145

我有一个文本文件,被告知要把它转换成UTF8格式。如何使用Vim进行转换呢?


可能是 Vim 编码选项 的重复问题。 - Benoit
可能是一个重复问题:如何使用vim更改文件的编码方式? - Lætitia
2个回答

223
如果您正在编辑一个以Latin1编码的文件,您会发现该缓冲区的'fileencoding'设置为Latin1。因此,在保存文件之前,您需要手动设置文件编码。
:set fileencoding=utf8
:w myfilename

还要注意,UTF8文件通常以字节顺序标记(BOM)开头,表示字节序。 BOM 是可选的,但某些程序仅使用它来确定文件编码。在某些情况下,Vim会写入BOM,但有时不会。要显式设置BOM,请执行以下操作:

:set bomb

了解更多信息,请参阅 :help mbyte-options:help utf8:help bomb


2
指令似乎运行良好,但是:1)utf-8没有字节序(如vim帮助文件所述,utf-8 BOM仅表示文件是utf-8);2)当您稍后再次打开文件时,您需要再次在前面设置set fileencoding=utf-8。如果您告诉Vim写入BOM(它确实会写入),它甚至不会注意到BOM。要使utf-8正常工作,您需要在启动设置中使用该命令或set encoding=utf-8。至少,在我的系统上是这样的。 - Stein
很棒的答案,已点赞!如果你想知道它是否起作用,在执行前后使用 file -bi filename.txt 命令检查一下,你会看到结果为 "text/plain; charset=utf-8" - HoldOffHunger
:set bomb 对我有用,谢谢。 - ferdymercury

40
:w ++enc=utf-8 %

将文件以UTF-8编码写入磁盘。


8
虽然你的回答正确,但它收到的赞数不应该比 Eric Johnson 的多那么多。原因是如果你没有设置 fileencoding:w ++enc=utf-8 只有第一次有效,下一次运行 :w 时,将使用 'fileencoding' 的值。如果你没有明确更改它(在编辑时显式更改或重新加载文件,希望 'fencs' 被适当设置并且实际编码被正确检测),则旧的编码将再次出现。 - Benoit
1
@MichaelKrelin-hacker,修改“fileencoding”也是回答这个问题的有效方法,而且我认为这不会导致养成坏习惯。但好吧,我想这只是情绪问题。 - Benoit
3
@Benoit,我并没有暗示Eric的答案是无效的!如果我对他的回答有任何奇怪之处,那不是内容的问题,而是为什么他会在很短的时间内发布问题和答案 :) - Michael Krelin - hacker
3
@Michael Krelin - hacker:请查看常见问题解答。鼓励回答自己的问题,这是Q&A页面的全部意义所在。回答者身份无关紧要。 - 0xC0000022L
2
@0xC0000022L,上次我检查过(现在还没有检查),解决问题应该是在研究后提出方案,而不是在一分钟内发布问题和答案。话虽如此,我只是在谈论他的回答有什么“奇怪”的地方,而不是什么使它无效之类的东西。 - Michael Krelin - hacker
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接