相关疑难解决方法(0)

使用PowerShell以UTF-8编写文件而不使用BOM

Out-File 似乎在使用UTF-8时强制BOM:

$MyFile = Get-Content $MyPath
$MyFile | Out-File -Encoding "UTF8" $MyPath
Run Code Online (Sandbox Code Playgroud)

如何使用PowerShell以UTF-8编写没有BOM的文件?

powershell encoding byte-order-mark utf-8

225
推荐指数
9
解决办法
21万
查看次数

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

在将输出流重定向到文件时,有没有办法省略字节顺序标记?例如,如果我想获取XML文件的内容并用新值替换字符串,我需要创建一个新的编码并将新输出写入如下所示的文件,这个文件非常简单:

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

我也试过使用Out-File,但指定UTF8编码仍然包含BOM:

( Get-Content .\settings.xml ) -replace 'expression', 'newvalue' | Out-File -Encoding 'UTF8' .\settings.xml
Run Code Online (Sandbox Code Playgroud)

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

( Get-Content .\settings.xml ) -replace 'expression, 'newvalue' > settings.xml
Run Code Online (Sandbox Code Playgroud)

问题是添加到输出文件的BOM通常会在从其他应用程序读取这些文件时导致问题(最值得注意的是,如果我修改XML并且它以BOM开头,大多数读取XML的应用程序都会爆炸,Chef Client也是不喜欢JSON属性文件中的BOM.如果我没有编写类似于Write-FileWithoutBom接受管道输入和输出路径的功能,那么在将输出重定向到文件时,我是否可以简单地"关闭"写入BOM?

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

powershell byte-order-mark file

1
推荐指数
1
解决办法
129
查看次数

标签 统计

byte-order-mark ×2

powershell ×2

encoding ×1

file ×1

utf-8 ×1