Lesen UTF-8-Dateien korrekt mit PowerShell

Folgende situation:

  • Ein PowerShell-Skript erstellt eine Datei mit UTF-8-Codierung
  • Der Benutzer kann oder kann nicht die Datei Bearbeiten, eventuell zu verlieren, die Stückliste, aber behalte die Codierung als UTF-8, und ändert dabei möglicherweise das line Separatoren
  • Das gleiche PowerShell-Skript liest die Datei ein, fügt etwas mehr Inhalt und schreibt ihn alle als UTF-8 wieder auf die gleiche Datei
  • Diese Durchlaufen werden können, viele Male

Mit Get-Content und Out-File -Encoding UTF8 ich habe Probleme beim Lesen es richtig. Es ist das stolpern über die BOM hat es geschrieben, bevor (Sie Sie in den Inhalt, brechen meine parsing, regex), nicht UTF-8-Codierung und sogar löscht Zeilenumbrüche im original content part.

Brauche ich eine Funktion, die Lesen können eine Datei mit UTF-8-Codierung, ignorieren und löschen Sie die Stückliste und nicht den Inhalt ändern. Was sollte ich verwenden?

Update

Ich habe soeben einen kleinen test-Skript, das zeigt, was ich versuche zu tun, und was passiert stattdessen.

# Read data if exists
$data = ""
$startRev = 1;
if (Test-Path test.txt)
{
    $data = Get-Content -Path test.txt
    if ($data -match "^[0-9-]{10} - r([0-9]+)")
    {
        $startRev = [int]$matches[1] + 1
    }
}
Write-Host Next revision is $startRev

# Define example data to add
$startRev = $startRev + 10
$newMsgs = "2014-04-01 - r" + $startRev + "`r`n`r`n" + `
    "Line 1`r`n" + `
    "Line 2`r`n`r`n"

# Write new data back
$data = $newMsgs + $data
$data | Out-File test.txt -Encoding UTF8

Nachdem Sie ein paar mal, neue Abschnitte Hinzugefügt werden sollte an den Anfang der Datei, die bestehenden Inhalte sollten nicht in irgendeiner Weise verändert werden (derzeit verliert Zeilenumbrüche) und keine neuen Zeilen Hinzugefügt werden sollte an das Ende der Datei (scheint manchmal zu passieren).

Statt, der zweite Lauf gibt mir eine Fehlermeldung.

  • Ich bin nicht groß mit der ganzen Codierung Thema, aber würden Sie nicht haben, zu re-injizieren der Stückliste, wenn es sich wieder entfernt, um ihn richtig Lesen? Ich bin ein wenig verwirrt von der Frage. Warum möchten Sie die UTF-8-BOM?
  • Mein text editor ist dumm, und entfernt es. Trotzdem weiß man nie, was text-Editoren, die mit UTF-8 Dateien. Mein script soll einfach nur intelligent genug sein, es zu handhaben. Wie die StreamReader-Klasse tut es ziemlich gut.
InformationsquelleAutor ygoe | 2014-04-01
Schreibe einen Kommentar