gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 00:33:37 27 4
gpt4 key购买 nike

将输出流重定向到文件时,有什么方法可以省略字节顺序标记吗?例如,如果我要获取XML文件的内容并用新值替换字符串,则需要创建新的编码并将新的输出写入类似以下内容的文件:

$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指定为编码仍然包含BOM:
( Get-Content .\settings.xml ) -replace 'expression', 'newvalue' | Out-File -Encoding 'UTF8' .\settings.xml

我想要做的就是简单地重定向到没有BOM的文件:
( Get-Content .\settings.xml ) -replace 'expression, 'newvalue' > settings.xml

问题是,从其他应用程序读取这些文件时,添加到输出文件的BOM通常会引起问题(最明显的是,如果我修改XML并且以BOM开头的话,大多数读取XML的应用程序都会爆炸,Chef Client也不喜欢JSON属性文件中的BOM)。我缺少编写像 Write-FileWithoutBom这样的功能来接受管道输入和输出路径的方法,在将输出重定向到文件时,有什么方法可以简单地“关闭”编写BOM的方法吗?

解决方案不一定必须使用重定向运算符。如果有内置的cmdlet,我可以使用它输出到没有BOM的文件,那也是可以接受的。

最佳答案

  • 在v5.1 版本的 Windows PowerShell中,没有 NO内置方法,可以避免创建使用UTF-8编码的BOM(如所示,直接调用.NET框架)。
  • 在v5.1 +中,您可以按以下方式更改> / >>的默认编码,但是如果选择utf8,您仍然会得到BOM:
  • $PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
  • 考虑使用我的this answer中的第三方函数Out-FileUtf8NoBom
  • 不幸的是,Windows PowerShell不太可能会支持创建无BOM的UTF-8文件[1]
    ,但希望PowerShell Core最终将成为Windows上可行的替代方案,它不仅支持该功能,而且默认将无BOM的文件解释为UTF-8(请参见下文)。
  • 相比之下,PowerShell Core默认情况下使用无BOM的UTF-8缺省(两者均用于Out-File / >Set-Content),并通过-Encoding标识符utf8utf8BOM为您提供BOM或无BOM的选择。


  • [1]在Microsoft blog post中重点强调:“ Windows PowerShell 5.1 与.NET Framework 4.x一样,将继续是Windows 10和Windows Server 2016的内置受支持组件。但是,将可能不会收到主要功能更新或较低优先级的错误修复。“”,并在注释中,“使用PowerShell Core 6.0
    和所有兼容性垫片的 目标是取代了Windows PowerShell 6.0的需求,同时在PowerShell Core 。所以,不,我们目前没有任何计划来制作Windows PowerShell 6.0。

    关于file - 是否可以使用重定向运算符将输出重定向到文件,而无需在Powershell中写入字节顺序标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51847114/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com