Vim 中从 DOS 到 Linux 的文本文档

Text document going From DOS to Linux in Vim

我得到了一个 XML 格式的跟踪文件(在 Windows 机器上创建)。当我在 Vim 中打开它或在命令行(在 Mac 或 Linux 上)对其进行 cat 时,它在视觉上看起来很好。但是在 XML 解析器未能如我所料加载文档后,我发现,在深入挖掘之后,整个过程中都有不可打印的字符:

h001:logs bill$ xxd trace.xml | head -n 3
0000000: fffe 3c00 3f00 7800 6d00 6c00 2000 7600  ..<.?.x.m.l. .v.
0000010: 6500 7200 7300 6900 6f00 6e00 3d00 2200  e.r.s.i.o.n.=.".
0000020: 3100 2e00 3000 2200 2000 6500 6e00 6300  1...0.". .e.n.c.

然后我尝试了以下方法,但没有成功删除这些非打印字符:

:%s/[^[:print:]]//g
:%s/[^[:control:]]//g
:%s/[^[:null:]]//g

我想这是因为我正在从 Windows 切换到 Linux,但我没有看到任何常见的伪像(例如 ^M、^@ , ETC)。

关于这里发生的事情的任何想法以及从 Vim 中删除这些内容的正确方法是什么?

问题是您的 XML 解析器不理解 UTF-16。

您可以通过打开一个空的 vim 会话并执行以下操作来转换它:

:e ++enc=utf-16le file.txt
:w ++enc=utf8

这将使用 utf-16 little endian 编码打开文件,并将其保存为 utf-8。