PowerShell schreibt UTF-8 mit BOM
- Matt
Ein kleines Skript sollte eine .env-Datei erzeugen, die ein anderes Programm anschließend einlesen sollte. Das scheiterte, weil die erste Zeile mit drei unsichtbaren Bytes begann. Set-Content -Encoding utf8 hängt in Windows PowerShell 5.1 genauso wie in PowerShell 7 ein Byte Order Mark an, sobald man utf8 explizit angibt - das entspricht intern System.Text.Encoding.UTF8, die per Definition mit BOM schreibt. Ohne Encoding-Angabe schreiben Out-File und Set-Content seit PowerShell 6 immerhin standardmäßig utf8NoBOM. Wer die BOM sicher vermeiden will, lässt den Parameter also entweder ganz weg oder setzt ihn ausdrücklich auf utf8NoBOM. In Windows PowerShell 5.1 gibt es diese Variante nicht - dort bleibt nur, auf den Parameter zu verzichten oder mit [System.IO.File]::WriteAllText() selbst zu schreiben.