Salvare in UTF8 senza BOM in PowerShell
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