【问题标题】:Vim opens Powershell dump files with null charactersVim 打开带有空字符的 Powershell 转储文件
【发布时间】:2012-07-20 08:44:41
【问题描述】:

在 Powershell 中,我运行一些命令行脚本并将其转储:

PS> cmd /c D:\script.bat | tee ~/out.log

然后,我用vim打开这个日志,我看到的大致是这样的:

яю^M^@
^@C^@:^@\^@U^@s^@e^@r^@s^@>^@s^@e^@t^@ ^@D^@E^@B^@U^@G^@_^@F^@U^@L^@F^@I^@L^@L^@M^@E^@N^@T^@=^@-^@X^@r^@u^@n^@j^@d^@w^@p^@:^@t^@r^@a^@n^@s^@p^@o^@r^@t^@=^@d^@t^@_^@s^@o^@c^@k^@e^@t^@,^@a^@d^@d^@r^@e^@s^@s^@=^@3^@0^@0^@4^@,^@s^@e^@r^@v^@e^@r^@=^@y^@,^@s^@u^@s^@p^@e^@n^@d^@=^@n^@ ^@^M^@

还有十六进制转储:

0000000: d18f d18e 0d00 0a00 4300 3a00 5c00 5500  ........C.:.\.U.
0000010: 7300 6500 7200 7300 3e00 7300 6500 7400  s.e.r.s.>.s.e.t.
0000020: 2000 4400 4500 4200 5500 4700 5f00 4600   .D.E.B.U.G._.F.
0000030: 5500 4c00 4600 4900 4c00 4c00 4d00 4500  U.L.F.I.L.L.M.E.
0000040: 4e00 5400 3d00 2d00 5800 7200 7500 6e00  N.T.=.-.X.r.u.n.
0000050: 6a00 6400 7700 7000 3a00 7400 7200 6100  j.d.w.p.:.t.r.a.
0000060: 6e00 7300 7000 6f00 7200 7400 3d00 6400  n.s.p.o.r.t.=.d.
0000070: 7400 5f00 7300 6f00 6300 6b00 6500 7400  t._.s.o.c.k.e.t.
0000080: 2c00 6100 6400 6400 7200 6500 7300 7300  ,.a.d.d.r.e.s.s.
0000090: 3d00 3300 3000 3000 3400 2c00 7300 6500  =.3.0.0.4.,.s.e.
00000a0: 7200 7600 6500 7200 3d00 7900 2c00 7300  r.v.e.r.=.y.,.s.
00000b0: 7500 7300 7000 6500 6e00 6400 3d00 6e00  u.s.p.e.n.d.=.n.
00000c0: 2000 0d00 0a                              ....

如何配置 vim 以正常打开此类文件而无需每次都删除这些空值? 附言记事本打开文件时不显示空值

【问题讨论】:

    标签: vim powershell encoding logfiles null-character


    【解决方案1】:

    您的文件采用 UTF-16 编码;每个字符由 2 个字节表示(低端在前)。

    只要将'encoding'设置成可以代表文件中字符的东西(推荐utf-8latin1不行),就可以了,不用折腾了。

    你需要告诉 Vim 文件的编码。打开时明确显示

    :edit ++enc=utf-16le out.log
    

    或通过将值添加到'fileencodings' 之前(在带有 BOM 的文件之后,可以唯一标识):

    :set fileencodings=ucs-bom,utf-16le,utf-8,default,latin1
    

    【讨论】:

      【解决方案2】:

      您的文件似乎是 UTF8 编码的。

      要打开它,请使用如下编码参数启动 vim:

      vim "+set encoding=utf-8"
      

      或者如果你已经在编辑文件,你可以设置编码如下:

      :set enc=utf-8
      

      【讨论】:

      • :设置编码?给出“encoding=utf-8”
      • 然而,":set fenc?"给出“fileencoding=cp1251”
      • 在运行命令之前,您是否尝试在 PowerShell 中更改 $OutputEncoding 的值?您可以尝试将其设置为[System.Text.Encoding]::ASCII
      • $OutputEncoding.EncodingName 是 US-ASCII
      • 在我的机器上执行你的命令会生成一个 UTF-16 编码的文件,你已经在 vim :set enc=utf-16le 中试过了吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多