encodingpowershellutf-8byte-order-mark

Using PowerShell to write a file in UTF-8 without the BOM


Out-File seems to force the BOM when using UTF-8:

$MyFile = Get-Content $MyPath
$MyFile | Out-File -Encoding "UTF8" $MyPath

How can I write a file in UTF-8 with no BOM using PowerShell?

Update 2021

PowerShell has changed a bit since I wrote this question 10 years ago. Check multiple answers below, they have a lot of good information!


Solution

  • Using .NET's UTF8Encoding class and passing $False to the constructor seems to work:

    $MyRawString = Get-Content -Raw $MyPath
    $Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False
    [System.IO.File]::WriteAllLines($MyPath, $MyRawString, $Utf8NoBomEncoding)