这是我正在使用的以下代码。
$file="final.txt"
$MyRawString = Get-Content -Raw "$file"
$Utf8BomEncoding = New-Object System.Text.UTF8BOMEncoding $False
[System.IO.File]::WriteAllLines($MyPath, $MyRawString, $Utf8BomEncoding)
如果您试图使用BOM输出utf8,则应创建参数encoderShouldEmitUTF8Identifier
设置为$true
的$Utf8BomEncoding
。
接下来,使用方法WriteAllLines()
实际上是为了写出一个行数组,所以您应该从Get-Content
中删除-Raw
开关,或者使用WriteAllText()
方法。
尝试
PowerShell版本高达5.1(含5.1(:
Get-Content -Path 'final.txt' -Encoding UTF8 | Set-Content -Path 'final_BOM.txt' -Encoding UTF8
PowerShell 5.1以上版本:
Get-Content -Path 'final.txt' -Encoding UTF8 | Set-Content -Path 'final_BOM.txt' -Encoding utf8BOM
或使用。Net方法。请注意,您需要使用绝对完整路径
$Utf8NoBOM = [System.Text.UTF8Encoding]::new($false)
$Utf8WithBOM = [System.Text.UTF8Encoding]::new($true)
[System.IO.File]::WriteAllText('X:final_BOM.txt', [System.IO.File]::ReadAllText('X:final.txt', $Utf8NoBOM), $Utf8WithBOM)