我获得了XML格式的跟踪文件(在Windows机器上创建)。当我在Vim中打开它或在命令行(在Mac或Linux上)上它时,它在视觉上看起来很好。但是,在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,^ @等)。
有关这里发生了什么的想法,以及从Vim中删除这些内容的正确方法是什么?
答案 0 :(得分:3)
问题是您的XML解析器无法理解UTF-16。
您可以通过打开一个空的vim会话并执行以下操作来转换它:
:e ++enc=utf-16le file.txt
:w ++enc=utf8
这将使用utf-16 little endian编码打开文件,并将其保存为utf-8。