PowerShell out-file: verhindert Codierungsänderungen
Zur Zeit arbeite ich an einigen such-und ersetzen-operation, die ich versuche zu automatisieren mit powershell. Leider habe ich gestern erkannt haben, dass wir unterschiedliche dateikodierungen in unsere codebase (UTF8 und ASCII). Denn wir tun diese suchen-und-ersetzen-Vorgänge in einer anderen Niederlassung, die ich nicht ändern kann die Datei Codierungen in dieser Phase.
Wenn ich die folgenden Zeilen es ändert alle Dateien in UCS-2 Little Eindian obwohl mein Standard-powershell-Kodierung gesetzt ist iso-8859-1 (Western European (Windows)).
$content = Get-Content $_.Path
$content -replace 'myOldText' , 'myNewText' | Out-File $_.Path
Gibt es eine Möglichkeit zu verhindern, dass powershell ändern der Datei-Codierung?
InformationsquelleAutor der Frage Pete | 2012-02-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Out-File
hat eine Standard-Codierung es sei denn, überschrieben mit der-Encoding
parameter:Was ich getan habe um dieses Problem zu lösen, ist zu versuchen, um die original-Datei das encoding durch Lesen versuchen zu Lesen, es ist byte order mark und es als
-Encoding
parameter-Wert.Hier ein Beispiel der Verarbeitung einer Reihe von text-Datei-Pfade, die ursprüngliche Kodierung, die Bearbeitung der Inhalte und schreiben Sie wieder zu der Datei mit dem original-Codierung.
Update Hier ist ein Beispiel dafür, immer die original-Datei-Codierung mittels der StreamReader-Klasse. Das Beispiel liest die ersten 3 bytes der Datei, so dass die
CurrentEncoding
- Eigenschaft festgelegt wird, basierend auf dem Ergebnis der interne BOM-detection-routine.http://msdn.microsoft.com/en-us/library/9y86s1a9.aspx
http://msdn.microsoft.com/en-us/library/system.text.encoding.getpreamble.aspx
InformationsquelleAutor der Antwort Andy Arismendi