gpt4 book ai didi

bash - '^@'在vim中是什么意思?

转载 作者:行者123 更新时间:2023-11-29 09:20:01 25 4
gpt4 key购买 nike

当我在 bash 中 cat 一个文件时,我得到以下信息:

$ cat /tmp/file 
microsoft

当我在 vim 中查看同一个文件时,我得到以下信息:

^@m^@i^@c^@r^@o^@s^@o^@f^@t^@

如何识别和删除这些“不可打印”字符。 '^@' 在 vi​​m 中是什么意思??

(只是一个背景信息:该文件是通过 base 64 解码和从 Microsoft Playready 的 mpd 文件的 pssh header 剪切创建的)

最佳答案

您看到的是 Vim 对不可打印字符 的可视化表示。在 :help 'isprint' 中有解释:

Non-printable characters are displayed with two characters:
0 - 31 "^@" - "^_"
32 - 126 always single characters
127 "^?"
128 - 159 "~@" - "~_"
160 - 254 "| " - "|~"
255 "~?"

因此,^@ 代表一个空字节 = 0x00。这些(和其他不可打印的字符)可以来自各种来源,但在您的情况下,它是......

编码问题

如果你在 Vim 中清楚地观察你的输出,每个第二个字节都是一个空字节;中间是预期的字符。这清楚地表明该文件使用了多字节编码(utf-16,大端,准确地说没有字节顺序标记),而 Vim 没有正确检测到,而是将文件打开为 latin1 左右(而在终端中一切正常)。

要解决此问题,您可以显式指定编码:

:edit ++enc=utf-16 /tmp/file

或者调整 'fileencodings' 选项,这样 Vim 可以自动检测到它。但是,请注意含糊不清(如您的情况)使这容易失败:

For an empty file or a file with only ASCII characters most encodings will work and the first entry of 'fileencodings' will be used (except "ucs-bom", which requires the BOM to be present).

这就是为什么建议对 16 位编码使用字节顺序标记 (BOM);但前提是您可以控制输出编码。

关于bash - '^@'在vim中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47456869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com