Salvare in UTF8 senza BOM in PowerShell

meno di 1 minuto/i di lettura

Per qualche ragione che solo Microsoft comprende, PowerShell fino alla versione 5.1 (inclusa) supporta la scrittura in UTF8 tramite la cmdlet Set-Content solo con encoding UTF8 BOM1

Come tanti, ignoro questa passione che hanno gli ingegneri di Windows nell’indicare l’ordine dei byte in una codifica che ha un solo ordine dei byte possibile.

Un trucco che personalmente ho usato per salvare il contenuto, ma pulire i 3 byte inutili (e a volte dannosi visto che determinati software funzionano male non aspettandosi in cima al file questa sequenza, se lavorano con UTF8) è il seguente:

$fileContent | Set-Content -Encoding UTF8 $filePath

[byte[]]$stream = Get-Content -Encoding Byte $filePath
Set-Content -Encoding Byte -Value $stream[3..($stream.Length-3)] $filePath

$fileContent contiene il contenuto che volete scrivere nel file

$filePath contiene il percorso del file

Fondamentalmente il trucco consiste nel salvare il file in UTF8 BOM, e poi riaprirlo come file binario e potare i primi 3 byte in cima al file.

Scrivi un commento