Windows- Powershell, im Gegensatz zu dem .NET-Framework zugrunde liegenden [1] , die folgenden Standardwerte verwendet:
auf Eingang: Dateien ohne BOM (Byte -Bestellzeichen) wird angenommen, in des Systems zu sein default encod ing, die der legacy istWindows code page ("ANSI" Code-Seite: die aktive, kulturspezifischen Einbyte- Codierung, wie über die Systemsteuerung konfiguriert).
auf Ausgang: die >
und >>
Umleitungsoperatoren erzeugen UTF-16 LE Dateien standardmäßig (das haben Sie - und Notwendigkeit - eine BOM).
Datei raubend und -produzierenden Cmdlets unterstützen in der Regel einen -Encoding
Parameter, die Sie explizit angeben, die Codierung können.
Vor PowerShell v5.1 war die Verwendung des zugrunde liegenden Cmdlets Out-File
explizit die einzige Möglichkeit, die Codierung zu ändern.
In Powershell v5.1 +, >
und >>
wirksam geworden Aliase Out-File
, so dass Sie die Codierung Verhalten von >
und >>
über die $PSDefaultParameterValues
Einstellungsvariablen ändern; z.B.:
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
.
Für Powershell UTF-8 richtig zu behandeln, können Sie es sowohl als Ein- und Ausgang Codierung angeben müssen [2] , aber beachten Sie, dass auf Ausgang, Powershell fügt immer eine Stückliste auf UTF-8 Dateien.
zu Ihrem Beispiel Beworben:
Get-Content -Encoding utf8 .\utf8.txt | Out-File -Encoding utf8 out.txt
Um eine UTF-8-Datei ohne eine Stückliste in Powershell zu erstellen, this answer von mir sehen.
Dagegen Power Kern die plattformübergreifende Ausgabe von Powerglücklicher standardmäßig BOM-less UTF-8 sowohl Ein- und Ausgang.
[1] Die NET Framework verwendet UTF-8 standardmäßig sowohl für Ein- und Ausgabe.
Dies - absichtlich - Unterschied im Verhalten zwischen PowerShell und dem .NET-Framework, auf dem es aufgebaut ist, ist ungewöhnlich.
[2] Get-Content
hat jedoch automatisch UTF-8-Dateien mit eine BOM erkennen.