vi 中的 ^@, ^I 和 $ 是什么意思?

vi 中的 ^@, ^I 和 $ 是什么意思?

当我尝试在 MapReduce(使用 Java)中使用 Context.write(k,v) 将数据写入文件时,我在文件中发现以下内容(用 vi 打开,有:set 列表):

^@R^@u^@n^@^I1$
^@a^@c^@c^@e^@s^@s^@^I1$
^@d^@e^@f^@a^@u^@l^@t^@ 2$
^@o^@u^@t^@^I2$
^@p^@r^@o^@j^@e^@c^@t^@^I1$
^@t^@a^@s^@k^@^I1$
^@w^@i^@n^@d^@o^@w^@s^@^I1$
^@y^@o^@u^@r^@^I1$

^@ ^I和是什么意思$^I意思是 吗\t? 我知道那$表示行尾,但它是否像 一样表示回车键\n? 如果是,那么 vi 中的 '$' 和 '^M' 有什么区别?

答案1

$是行尾,如选项:set list的默认值所示listchar^I是制表符。

^@null角色。

由于某些奇怪的原因,文件中每个有意义的字符前面都会加上一个null除数字和(可能)空格以外的字符。

这不是 Vi(m) 的问题:请检查该方法的文档,看看是否有办法在不带这些nulls 的情况下输出数据。

答案2

您打开的文件是 UTF-16 或 UCS-2 编码的,这是 Java 中的标准。vi(如实际的vi,而不是vim符号链接到的vi)只能处理 ASCII(或 ISO-8859-1?)文本。使用vim,或将文件转换为 ASCII(例如iconv -f utf-16 -t ascii <input> <output>)。

答案3

如果你的命令是由 Vim 执行的vi,你可以使用以下命令重新加载文件

:edit ++enc=ucs-2

或者直接指定编码

$ vim ++enc=ucs-2 filename

或者,如果您需要频繁打开这些文件,请ucs-2将该选项添加到'fileencodings'前面,例如在您的~/.vimrc.

相关内容