如何使用vim更改文件的编码?


235

我习惯于使用vim来修改文件的行尾:

$ file file
file: ASCII text, with CRLF line terminators
$ vim file
:set ff=mac
:wq
$ file file
file: ASCII text, with CR line terminators

是否可以使用类似的过程来更改文件的unicode编码?我正在尝试以下操作,但不起作用:

$ file file.xml
file.xml: Unicode text, UTF-16, little-endian
$ vim file
:set encoding=utf-8
:wq
$ file file.xml
file.xml: Unicode text, UTF-16, little-endian

我看到有人说他可以“设置fileencoding = utf-8,然后更新并写入文件,然后它可以工作”,但我似乎丢失了一些东西,否则他感到困惑。我不知道他的意思是“然后更新”。

Answers:



163

请注意,两者之间存在差异

设置编码

设置文件编码

在第一种情况下,您将更改终端中显示的输出编码。在第二种情况下,您将更改所写入文件的输出编码。


1
谢谢!Apache输出utf-8,php也输出utf-8,浏览器说,vim set encoding用来表示,但页面仍显示残缺的字符,就像iso-8859-1一样。使用set fileencoding呈漂亮“Latin1的”
阿德里亚诺Varoli广场

77

虽然使用vim可以做到,但是为什么不简单使用iconv?我的意思是-加载文本编辑器只是为了进行编码转换,好像是使用太大的锤子来钉住太小的钉子。

只是:

iconv -f utf-16 -t utf-8 file.xml > file.utf8.xml

这样就完成了。


19
缺点是,iconv在Windows上可能不容易使用。
阿德里亚诺瓦里里广场

2
@AdrianoVaroliPiazza都不是vim。

1
我会说多次“只是安装”下载,甚至是便携式版本也构成“易于使用”
Adriano Varoli Piazza

2
@ adriano-varoli-piazza否,如@ coder-tim所述,iconv在带有Cygwin和MingW的Windows上可用。
t0r0X

1
@mario不,Vim在Windows上非常容易获得:vim.org/download.php#pc
t0r0X

52

就像您的步骤一样,设置fileencoding应该可以。但是,我想添加一个“设置炸弹”,以帮助编辑器将文件视为UTF8。

$ vim file
:set bomb
:set fileencoding=utf-8
:wq

8
感谢您的回答,它使我了解了有关UTF字节顺序标记的更多信息。但是,仅供参考,对于UTF-8,设置BOM似乎是不必要的/不可行的,因为它不是固定的字节长格式(如16或32)。请参见此处获取说明和参考。对于vim来说,这不是一个问题(甚至没有帮助),我只是以为人们应该意识到它可能会在其他地方引起兼容性问题。
joelhardi 2011年

2
bomb还是bom,可以unset吗?编辑:是的,您可以通过删除它set nobomb
icedwater

6
是的,VIm为我们设置了bomb(带有ab)。
鲁芬2014年

根据文档,:set bomb如果:set fenc=utf-8.. 则打开:he bomb
Evan Carroll 2014年

12
我们所有的基本编码现在都属于UTF-8
roblogic

6

在读取文件之前,仅在命令行上更改编码可能会很有用:

rem On MicroSoft Windows
vim --cmd "set encoding=utf-8" file.ext
# In *nix shell
vim --cmd 'set encoding=utf-8' file.ext

启动--cmd


3
第一个变体也应适用于* nix外壳。'single quotes'只需要转义所有元字符,通常这不是您想要的。
jpaugh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.