Powershell: UTF8-Problem beim Export

Leider wird es wohl immer ein leidiges Thema bleiben: Das Encoding! So ist  UTF8 mit dem sogenannten „Byte Order Mark“ immer wieder für die Inkompatibilität in den Programmen, in denen man versucht eine so codierte Datei zu öffnen, bekannt. So ist es auch, wenn man eine ältere Powershell-Version nutzen muss und dort z. B. versucht eine XML-Datei abzuspeichern. Was man auch versucht, das Encoding „zerhaut“ einem die ausgegebenen Dateien. Nur mit einem Trick habe ich es unter Windows Server 2008R2 mit einer frühen Powershell-Version (2.0 glaube ich) doch noch hinbekommen.

Das Problem an der alten Powershell-Version ist, dass diese standardmäßig in UTF8 mit BOM die Dateien ausgibt. Warum das so ist kann ich mir nicht erklären, jedenfalls ist es unter aktuellen Versionen nicht mehr so, denn dort erfolgt die Ausgabe aus der Powershell grundsätzlich ohne BOM, was prinzipiell schon mal gut ist. Das Problem unter Version 2 scheint aber viele Leute beschäftigt zu haben, weshalb ich eine ganze Reihe an Lösungsansätzen fand, die aber bei mir alle nicht funktioniert haben, u. a. kann man sich folgende Vorgehensweisen wahrscheinlich sparen.

 

Als Alternative zur normalen Save-Option fand ich folgende Ausgabemöglichkeit, die aber leider trotzdem nichts brachte:

Unter Ausnutzung eines Bugs in Dot.Net, wofür auch immer man das $false angeben sollte, klappte es auch nicht:

Ebenfalls mit dieser Alternative war kein Erfolg in Sicht, auch nicht wenn man mit dem Encoding herumspielt:

 

Die einzige Möglichkeit, wie ich den Export in UTF8 ohne BOM hinbekommen habe, ist recht lachhaft, aber es funktioniert:

1. Das Powershell-Skript in Notepad++ öffnen.

2. Das Encoding auf UTF8 ohne BOM abändern.

3. Das Skript speichern. Hierzu kann man dann bspw. die normale Save-Funktion im Fall einer XML-Datei verwenden:

Anscheinend ändert sich dadurch die Standardausgabe der alten Powershell in das Encoding, in welchem das PS-Skript vorliegt.

Diese Lösung hat allerdings einen sehr unschönen Nachteil, denn wenn man die Datei in der Powershell ISE öffnet und wieder abspeichert, dann ist das ENcoding des Skriptes wieder inkl. BOM 🙁

 

Schreibe einen Kommentar