2016-06-11 3 views

Antwort

12

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.

Verwandte Themen