首页>Program>source

我的$ PSVersion输出如下:

Name                           Value
----                           -----
PSVersion                      7.0.1
PSEdition                      Core
GitCommitId                    7.0.1
OS                             Microsoft Windows 10.0.19041
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

如果我运行

wsl -l

我的输出在控制台中显示为:

Windows Subsystem for Linux Distributions:
Ubuntu-20.04 (Default)
ubuntu-20.04-systemd

如果我运行

wsl -l | Out-File foo.txt

它在文件中的显示方式为:

W i n d o w s   S u b s y s t e m   f o r   L i n u x   D i s t r i b u t i o n s : 
 
 
 U b u n t u - 2 0 . 0 4   ( D e f a u l t ) 
 
 
 u b u n t u - 2 0 . 0 4 - s y s t e m d 

我尝试为Out-File指定不同的输出编码无济于事.我想了解发生了什么以及如何解决它。

谢谢!

最新回答
  • 7天前
    1 #

    wsl -l 意外地将UTF-16LE(" Unicode")字符编码用于其输出 ,导致额外的 NUL 字节( 0x0 )在PowerShell解释输出时(在您捕获或重定向输出时,它总是会在ASCII范围字符之间插入(可能像空格一样出现在处)。根据存储在 [Console]::OutputEncoding中的编码,控制台中的显示(不受影响) ,默认为系统的活动OEM代码页。

    解决方案是 (temporarily) set [Console]::OutputEncoding 匹配 wsl 的输出编码

    $orig = [Console]::OutputEncoding
    [Console]::OutputEncoding = [System.Text.Encoding]::Unicode # UTF-16LE
    wsl -l > foo.txt # > is effectively like Out-File
    [Console]::OutputEncoding = $orig
    

    请参阅此答案以获取自定义功能 Debug-String ,这有助于诊断此类编码问题。

  • python:我无法删除整列-pandas
  • angular:Ionicons在Ionic4中返回404