代码之家  ›  专栏  ›  技术社区  ›  codewario

是否可以使用重定向运算符将输出重定向到文件,而无需在Powershell中写入字节顺序标记?

  •  1
  • codewario  · 技术社区  · 6 年前

    $newContent = ( Get-Content .\settings.xml ) -replace 'expression', 'newvalue'
    $UTF8NoBom = New-Object System.Text.UTF8Encoding( $false )
    [System.IO.File]::WriteAllText( '.\settings.xml', $newContent, $UTF8NoBom )
    

    我也试过用 Out-File UTF8 由于编码仍包含物料清单:

    ( Get-Content .\settings.xml ) -replace 'expression', 'newvalue' | Out-File -Encoding 'UTF8' .\settings.xml
    

    我想做的只是重定向到一个没有BOM的文件:

    ( Get-Content .\settings.xml ) -replace 'expression, 'newvalue' > settings.xml
    

    Write-FileWithoutBom 要接受管道输入和输出路径,在将输出重定向到文件时是否可以简单地“关闭”编写BOM?

    解决方案不一定

    1 回复  |  直到 6 年前
        1
  •  5
  •   mklement0    6 年前
    • Windows PowerShell 从v5.1开始 ,有 没有避免创建BOM的内置方法 使用UTF-8编码

      • 在v5.1+中,您可以更改 > >> 如下,但如果你选择 utf8 仍然 获取物料清单:

        • $PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
      • Out-FileUtf8NoBom this answer 我的。

      • 不幸的是,不太可能 Windows PowerShell 将永远支持创建没有BOM的UTF-8文件 [一] ,但希望是PowerShell 核心 ,它不仅支持这一点,而且默认将无BOM文件解释为UTF-8(见下文),最终将成为Windows上一个可行的替代方案。

    • PowerShell 相比之下,使用 无物料清单 UTF-8型 默认情况下 Out-File / > Set-Content -Encoding 说明符 utf8型 utf8BOM


    [1] 从一个 Microsoft blog post Windows PowerShell 5.1版 与.NETFramework4.x非常相似,它将继续是Windows10和WindowsServer2016的内置支持组件。然而,它 可能不会收到主要功能更新或较低优先级的错误修复。 “而且,在一个评论中,” 在将生态系统聚合到PowerShell Core上的同时,取代了对Windows PowerShell 6.0的需求 . 所以不,我们现在 "