14

我不希望 vim 以任何编码特定的方式解释我的数据。换句话说,当我在 vim 中时,我希望光标所在的字符对应于实际的byte,而不是那个字节的 utf* (等)表示。

我需要使用 vim 来分析由其他人(使用其他软件)造成的 Unicode 转换错误引起的问题,所以重要的是我看到了实际存在的内容。

例如,在 Cygwin 的 vim 中,我已经能够将 UTF-8 BOM 视为

 [开始文件数据]

太棒了。我认为这是一个 UTF-8 BOM,如果我想知道每个字符的十六进制是什么,我可以将光标放在字符上并使用“ga”。

我最近有一台合适的 Linux 机器(Fedora)。在 /etc/vimrc 中,存在这一行

设置文件编码=ucs-bom,utf-8,latin1

当我查看这台机器上的 UTF-8 BOM 时,BOM 完全隐藏。

当我将以下行添加到 ~/.vimrc

设置文件编码=latin1

我懂了



前 3 个字符是 BOM(当对它们使用 ga 时)。我不知道最后三个字符是什么。

有一次,我什至看到 UTF-8 BOM 表示为“feff”——UTF-16 BOM。

无论如何,你看到了我的问题。我需要准确查看文件中的内容,而无需 vim 为我解释字节。我知道我可以使用 xxd、od 等,但 vim 作为分析工具一直非常方便。另外,我希望能够编辑文件并保存它们而不会出现任何转换问题。

谢谢你的帮助。

4

3 回答 3

17

使用'binary'方式:

:edit ++bin file

或者

vim -b file

来自:help 'binary'

'fileencoding' 和 'fileencodings' 选项将不被使用,文件被读取而不进行转换。

于 2012-08-31T17:48:27.317 回答
6

加载文件后,我得到了一些好处:e ++enc=latin1(VIm 对编码的初步猜测在这个阶段并不重要)。

于 2015-02-13T16:34:36.800 回答
6

该序列实际上是 U+FEFF (BOM) 编码的 UTF-8、解码的 latin1、编码的 UTF-8 和再次解码的 latin1。 是编码为 UTF-8 并解码为 latin1 的 U+FEFF (BOM)。你无法摆脱编码。这些不是实际的 bytes,它们是从不正确的解码中显示的 latin1 字符。如果需要字节,请使用十六进制编辑器;否则,请使用正确的解码。

于 2012-09-01T00:59:40.500 回答