Liest UTF-8-Dateien korrekt mit PowerShell

7

Folgende Situation:

  • Ein PowerShell-Skript erstellt eine Datei mit UTF-8-Codierung
  • Der Benutzer kann die Datei bearbeiten oder nicht, wodurch möglicherweise die Stückliste verloren geht. Die Codierung sollte jedoch als UTF-8 beibehalten und möglicherweise die Zeilentrennzeichen
  • geändert werden
  • Dasselbe PowerShell-Skript liest die Datei, fügt weitere Inhalte hinzu und schreibt alles als UTF-8 zurück in dieselbe Datei
  • Dies kann oft wiederholt werden

Mit Get-Content und Out-File -Encoding UTF8 habe ich Probleme, es richtig zu lesen. Es stolpert über die BOM, die es zuvor geschrieben hat (es in den Inhalt einfügen, bricht meine Parsing-Regex), verwendet keine UTF-8-Kodierung und löscht sogar Zeilenumbrüche im ursprünglichen Inhaltsteil.

Ich brauche eine Funktion, die jede Datei mit UTF-8-Codierung lesen kann, die Stückliste ignoriert und löscht und den Inhalt nicht ändert. Was soll ich verwenden?

Aktualisieren

Ich habe ein kleines Testskript hinzugefügt, das zeigt, was ich versuche und was stattdessen passiert.

%Vor%

Nach einigen Wiederholungen sollten neue Abschnitte an den Anfang der Datei hinzugefügt werden, der vorhandene Inhalt sollte in keiner Weise geändert werden (derzeit werden Zeilenumbrüche verloren) und am Ende keine neuen Zeilen hinzugefügt die Datei (scheint manchmal zu passieren).

Stattdessen gibt mir der zweite Lauf einen Fehler.

    
ygoe 01.04.2014, 14:49
quelle

3 Antworten

19

Wenn die Datei UTF8 sein soll, warum versuchen Sie nicht, sie zu lesen, wenn Sie UTF8 dekodieren:

%Vor%     
JPBlanc 01.04.2014 16:20
quelle
3

Wirklich JPBlanc hat Recht. Wenn Sie möchten, dass es als UTF8 gelesen wird, geben Sie dies an, wenn die Datei gelesen wird.

Nebenbei bemerkt, Sie verlieren hier die Formatierung mit dem [String] + [String] Zeug. Ganz zu schweigen von deiner Regex-Übereinstimmung funktioniert nicht. Überprüfen Sie die Änderungen der Regex-Suche und die Änderungen an den $ newMsgs und die Art, wie ich Ihre Daten in die Datei ausgabe.

%Vor%     
TheMadTechnician 01.04.2014 18:19
quelle
0

Get-Content scheint keine UTF-Dateien ohne BOM zu verarbeiten (wenn Sie das Encoding-Flag weglassen). System.IO.File.ReadLines scheint eine Alternative zu sein, Beispiele:

%Vor%     
Emil G 24.02.2017 08:57
quelle

Tags und Links