VIM 每隔一个字符显示 ^@ 并在行尾显示 ^M^@

VIM 每隔一个字符显示 ^@ 并在行尾显示 ^M^@

抱歉,如果它在某个地方得到了回答,我不知道如何寻找它。我收到了一系列来自银行的报告,我应该处理这些报告,但它们似乎……编码错误?

VIM 中的前两行:

     1 ^M^@
     2 ^@:^@2^@0^@:^@3^@0^@4^@0^@7^@1^@9^@^M^@

例如 gedit 中的相同两行:

     1 
     2 :20:3040719

谁能告诉我发生了什么事?如果我用fenc=utf8or打开文件并不重要fenc=cp1250(这是这些文件应该使用的编码)。我什至尝试过,fenc=ucs-bom因为我认为它与字节顺序有关,但它也没有改变任何东西。我知道^@是 null 并且^M是 Windows 风格的换行符(CRLF),但是在ff=dos和之间进行更改ff=unix也没关系。

我有来自同一银行的旧文件(在他们引入一些更改之前)并且它工作正常 -file显示它extended-ASCII,而损坏的文件显示为data

$ file *sta
20220411_182719.sta: Non-ISO extended-ASCII text, with CRLF line terminators
20220412_071916.sta: data

我可以替换 VIM 中的这些字符并处理文件,但我需要使用 PHP 每天自动处理数千个文件,并且无法真正使用 VIM。理想情况下,我只想告诉银行支持人员他们搞砸了什么。

答案1

好的,找到了。它是UTF-16 Little Endian

:e ++enc=utf16le

我现在可以在处理时正确转换它。

相关内容