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

ski*_*ppy 229 unicode vim

我习惯使用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
Run Code Online (Sandbox Code Playgroud)

是否可以使用类似的过程来更改文件的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
Run Code Online (Sandbox Code Playgroud)

我看到有人说他可以"设置fileencoding = utf-8,然后更新并写入文件,它可以工作",但我似乎错过了一些东西,否则他很困惑.我不知道"然后更新"是什么意思.

Bri*_*new 247

来自doc:

:写++ enc = utf-8 russian.txt

因此,您应该能够将编码更改为write命令的一部分.

  • 更新的文档链接:http://vimdoc.sourceforge.net/htmldoc/usr_45.html#45.4 (2认同)

Joh*_*han 160

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

set encoding

set fileencoding

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


小智 78

虽然使用vim完全可以,但为什么不简单地使用iconv?我的意思是 - 加载文本编辑器只是为了进行编码转换似乎使用太大的锤子太小的指甲.

只是:

iconv -f utf-16 -t utf-8 file.xml > file.utf8.xml
Run Code Online (Sandbox Code Playgroud)

而且你已经完成了.

  • 在Windows上可能不容易获得下行,iconv. (19认同)
  • @AdrianoVaroliPiazza既不是vim. (2认同)
  • 它适用于Cygwin中的Windows (2认同)
  • @ adriano-varoli-piazza否,如@ coder-tim所述,iconv在带有Cygwin和MingW的Windows上可用。 (2认同)
  • @mario 不,Vim 在 Windows 上很容易获得:http://www.vim.org/download.php#pc (2认同)

Fra*_*cis 53

就像您的步骤一样,设置fileencoding应该可行.但是,我想添加一个"set bomb"来帮助编辑器将文件视为UTF8.

$ vim file
:set bomb
:set fileencoding=utf-8
:wq
Run Code Online (Sandbox Code Playgroud)

  • 我们所有的基本编码现在都属于UTF-8 (11认同)
  • 感谢您的回答,它让我了解了有关UTF字节顺序标记的更多信息.但是,仅供参考,为UTF-8设置BOM似乎是不必要的/不可取的,因为它不是像16或32那样的固定字节长度格式.请参阅[here](http://vim.wikia.com/wiki/Working_with_Unicode)以获得解释和参考.这对于vim来说不是问题(甚至是有用的),我只是认为人们应该意识到它可能会导致其他地方的兼容性问题. (8认同)
  • 是的,VIm为我们设置了'炸弹'(用ab). (5认同)
  • 它是`炸弹'还是`bom`,它可以是'未设置'吗?**编辑**:是的,你可以通过`set nobomb`删除它. (2认同)

Han*_*zel 6

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

rem On MicroSoft Windows
vim --cmd "set encoding=utf-8" file.ext
# In *nix shell
vim --cmd 'set encoding=utf-8' file.ext
Run Code Online (Sandbox Code Playgroud)

开始--cmd

  • 第一个变体也应该适用于 *nix shell。`'单引号'` 只需要转义所有元字符,这通常不是你想要的。 (4认同)