搜索非字符(字符替换指示符)

搜索非字符(字符替换指示符)

我有一个文本文件(实际上是从 LibreOffice 中的 .xlsx 导出的 .csv),在 LibreOffice Calc 中打开时,其中的行显示为乱码。在 VIM 中,它们显示如下:

Joe User, [email protected], p@ss<96>w0rd

<96> 曾是一些与 相似的有趣字符-,但 MS Office 决定将其更改为其他字符。因此该文件不是ASCII:

$ file -i Users.csv
Users.csv: text/plain; charset=unknown-8bit

请注意,所有这些“有趣”字符的代码点都小于 127,所以我真的不知道 Calc 和 VIM 如何意识到这不是 ASCII。哪些其他编码的所有代码点都低于 127,即不兼容 ASCII?此外,如何在 VIM 中搜索这些字符?对于 127 以上的非 ASCII 字符我使用/[^\x00-\x127]搜索,但当然不会找到<96>

原始 .xlsx 文件仍然可以在另一个用户的 Windows 计算机上找到,果然我可以在他的 MS Office 中验证该<96>字符不是 ASCII 96 `,而是 的一些有趣变体'

答案1

<96>不是 ASCII 96:它是 UTF-8 U+0096(拉丁语 1 扩展的一部分)的表示,“受保护区域的开始”,不管它是什么意思。

您可以点击ga查看光标下字符的信息。对于<96>,您将获得以下内容:

<<96>> 150, Hex 0096, Octal 226

您可以使用以下命令从缓冲区中删除该字符:

:%s/<C-v>u0096//g

看起来应该是这样的:

:%s/<96>//g

或者你可以这样做:

:%s/\%u0096//g    " hex form

或者:

:%s/\%d150//g     " decimal form

或者:

:%/\%o226//g      " octal form

:help ga:help utf-8-typing:help \%u

相关内容