将输出流重定向到文件时,有什么方法可以省略字节顺序标记吗?例如,如果我要获取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的文件,那也是可以接受的。
最佳答案
>
/ >>
的默认编码,但是如果选择utf8
,您仍然会得到BOM:$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
Out-FileUtf8NoBom
。 ,但希望PowerShell Core最终将成为Windows上可行的替代方案,它不仅支持该功能,而且默认将无BOM的文件解释为UTF-8(请参见下文)。
Out-File
/ >
和Set-Content
),并通过-Encoding
标识符utf8
和utf8BOM
为您提供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/