Tipp des Tages: Text-Dateien im BOM-Format finden

Die PowerShell ISE hat die etwas lästige Eigenart, dass Textdateien mit einem sog. BOM-Header gespeichert. Das bedeutet konkret, dass die Datei mit den Byte-Werten 255 und 254 beginnt oder FF EF als Hexadezimalzahlen. BOM steht für Byte Order Mark und soll einen Hinweis darauf geben, dass als Zeichencode UTF-8 verwendet wird (ich hoffe, ich gebe das korrekt wieder). Mehr dazu unter https://de.wikipedia.org/wiki/Byte_Order_Mark.

Dass eine einfache Angelegenheit erstaunlich kompliziert sein kann, macht eine ausführliche Abhandlung deutlich, die das Zusammenspiel von VS Code mit der PowerShell in Bezug auf die Zeichencodierung beschreibt:

https://docs.microsoft.com/en-us/powershell/scripting/dev-cross-plat/vscode/understanding-file-encoding?view=powershell-7

Ich muss leider zugegeben, dass ich immer wieder in Situationen komme, in denen in die Umlaute einer in VS-Code gespeicherten Ps1-Datei durch „seltsame“ Sonderzeichen ersetzt werden (die in der oben genannten Doku natürlich alle beschrieben werden).

Wie dem auch sei, mich hat es einfach einmal interessiert, welche Ps1-oder allgemein Textdateien einen solchen BOM-Header besitzen. Der folgende Befehl gibt zunächst für die Windows PowerShell alle iese Dateien aus, in dem er jeweils die ersten beiden Bytes der Datei liest und diese als Hex-Werte mit FFEF vergleicht:

Der obige Befehl funktioniert nur mit der Windows PowerShell, da es den Wert Byte für den Encoding-Parameter nicht bei PowerShell 7 gibt. Dafür gibt es mit dem AsByteStream-Parameter zwar ein flexibleres Konzept, allerdings darf der TotalCount-Parameter nicht mit diesem Parameter kombiniert werden, so dass ein Select-Object mit -First 2 erforderlich wird.

Der folgende Befehl entspricht dem letzten Befehl, nur dass er ab PowerShell 6 funktioniert:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.