Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Kurzbeschreibung
Beschreibt, wie PowerShell die Zeichencodierung für die Eingabe und Ausgabe von Zeichenfolgendaten verwendet.
Lange Beschreibung
Unicode ist ein weltweiter Zeichencodierungsstandard. Das System verwendet Unicode ausschließlich für Zeichen- und Zeichenfolgenmanipulation. Eine ausführliche Beschreibung aller Aspekte von Unicode finden Sie im Unicode-Standard.
Windows unterstützt Unicode- und herkömmliche Zeichensätze. Herkömmliche Zeichensätze, z. B. Windows-Codeseiten, verwenden 8-Bit-Werte oder Kombinationen von 8-Bit-Werten, um die Zeichen darzustellen, die in einer bestimmten Sprache oder geografischen Regionseinstellungen verwendet werden.
PowerShell verwendet standardmäßig einen Unicode-Zeichensatz. Mehrere Cmdlets verfügen jedoch über einen Codierungsparameter , der die Codierung für einen anderen Zeichensatz angeben kann. Mit diesem Parameter können Sie die spezifische Zeichencodierung auswählen, die Sie für die Interoperabilität mit anderen Systemen und Anwendungen benötigen.
Die folgenden Cmdlets weisen den Codierungsparameter auf:
- Microsoft.PowerShell.Management
- Add-Content
- Get-Content
- Set-Content
- Microsoft.PowerShell.Utility
- Export-Clixml
- Export-Csv
- Export-PSSession
- Format-Hex
- Import-Csv
- Out-File
- Select-String
- Send-MailMessage
Das Bytereihenfolgenzeichen
Das Bytereihenfolgenzeichen (BOM) ist eine Unicode-Signatur in den ersten Bytes einer Datei oder eines Textstreams, die angeben, welche Unicode-Codierung für die Daten verwendet wird. Weitere Informationen finden Sie in der Dokumentation zum Byte-Bestellzeichen .
In Windows PowerShell erstellt jede Unicode-Codierung außer UTF7immer eine BOM. PowerShell (v6 und höher) ist standardmäßig für alle Textausgabe aktiviert utf8NoBOM .
Vermeiden Sie aus Gründen der allgemeinen Kompatibilität die Verwendung von BOMs in UTF-8-Dateien. Unix-Plattformen und Unix-Erbe-Dienstprogramme, die auch auf Windows-Plattformen verwendet werden, unterstützen keine BOMs.
Ebenso sollte die UTF7 Codierung vermieden werden. UTF-7 ist keine standardmäßige Unicode-Codierung und wird ohne BOM in allen Versionen von PowerShell geschrieben.
Das Erstellen von PowerShell-Skripts auf einer Unix-ähnlichen Plattform oder die Verwendung eines plattformübergreifenden Editors unter Windows, z. B. Visual Studio Code, führt zu einer dateicodierten Verwendung UTF8NoBOM. Diese Dateien funktionieren in PowerShell einwandfrei, können aber in Windows PowerShell unterbrechen, wenn die Datei Nicht-Ascii-Zeichen enthält.
Wenn Sie Nicht-Ascii-Zeichen in Ihren Skripts verwenden müssen, speichern Sie sie mit BOM als UTF-8. Ohne die BOM interpretiert Windows PowerShell Ihr Skript als codiert in der älteren "ANSI"-Codepage. Umgekehrt können Dateien, die über die UTF-8 BOM verfügen, auf Unix-ähnlichen Plattformen problematisch sein. Viele Unix-Tools wie cat, sed, awk, und einige Editoren wie gedit wissen nicht, wie man die BOM behandeln kann.
Zeichencodierung in Windows PowerShell
In PowerShell 5.1 unterstützt der Encoding-Parameter die folgenden Werte:
-
AsciiVerwendet ascii-Zeichensatz (7-Bit). -
BigEndianUnicodeVerwendet UTF-16 mit der Big-End-Byte-Reihenfolge. -
BigEndianUTF32Verwendet UTF-32 mit der Big-End-Byte-Reihenfolge. -
ByteCodiert eine Reihe von Zeichen in eine Bytesequenz. -
DefaultVerwendet die Codierung, die der aktiven Codeseite des Systems (in der Regel ANSI) entspricht. -
OemVerwendet die Codierung, die der aktuellen OEM-Codeseite des Systems entspricht. -
StringIdentisch mitUnicode. -
UnicodeVerwendet UTF-16 mit der Little-Endian Byte-Reihenfolge. -
UnknownIdentisch mitUnicode. -
UTF32Verwendet UTF-32 mit der Little-Endian Byte-Reihenfolge. -
UTF7Verwendet UTF-7. -
UTF8Verwendet UTF-8 (mit BOM).
Im Allgemeinen verwendet Windows PowerShell standardmäßig die Unicode UTF-16LE-Codierung . Die von Cmdlets in Windows PowerShell verwendete Standardcodierung ist jedoch nicht konsistent.
Hinweis
Mit einer beliebigen Unicode-Codierung, mit Ausnahme UTF7, wird immer eine BOM erstellt.
Für Cmdlets, die ausgabe in Dateien schreiben:
Out-Fileund die Umleitungsoperatoren>und>>erstellen UTF-16LE, die sich insbesondere vonSet-ContentundAdd-Content.New-ModuleManifestundExport-Clixmlauch UTF-16LE-Dateien erstellen.Wenn die Zieldatei leer ist oder nicht vorhanden ist,
Set-ContentundAdd-Contentverwenden SieDefaultdie Codierung.Defaultist die Codierung, die durch die ANSI-Legacycodeseite des aktiven Systemgebietsschemas angegeben wird.Export-CsverstelltAsciiDateien, verwendet jedoch bei Verwendung des Append-Parameters unterschiedliche Codierung (siehe unten).Export-PSSessionerstellt UTF-8-Dateien standardmäßig mit BOM.New-Item -Type File -Valueerstellt eine BOM-weniger UTF-8-Datei.Send-MailMessageverwendetAsciistandardmäßig Codierung.Start-TranscripterstelltUtf8Dateien mit einer BOM. Wenn der Append-Parameter verwendet wird, kann die Codierung unterschiedlich sein (siehe unten).
Für Befehle, die an eine vorhandene Datei angefügt werden:
Out-File -Appendund der>>Umleitungsoperator versucht nicht, mit der Codierung des Inhalts der vorhandenen Zieldatei übereinzugleichen. Stattdessen verwenden sie die Standardcodierung, es sei denn, der Codierungsparameter wird verwendet. Sie müssen beim Anfügen von Inhalten die ursprüngliche Codierung der Dateien verwenden.Wenn kein expliziter Codierungsparameter vorhanden ist,
Add-Contentwird die vorhandene Codierung erkannt und automatisch auf den neuen Inhalt angewendet. Wenn der vorhandene Inhalt keine BOM aufweist,Defaultwird die ANSI-Codierung verwendet. Das Verhalten istAdd-Contentin PowerShell (v6 und höher) identisch, es sei denn, die Standardcodierung istUtf8.Export-Csv -Appendentspricht der vorhandenen Codierung, wenn die Zieldatei eine BOM enthält. Wenn keine BOM vorhanden ist, wird die Codierung verwendetUtf8.Start-Transcript -Appendentspricht der vorhandenen Codierung von Dateien, die eine BOM enthalten. Wenn keine BOM vorhanden ist, wirdAsciistandardmäßig eine Codierung verwendet. Diese Codierung kann zu Datenverlusten oder Zeichenbeschädigungen führen, wenn die Daten im Transkript Multibyte-Zeichen enthalten.
Für Cmdlets, die Zeichenfolgendaten lesen, wenn keine BOM vorhanden ist:
Get-ContentundImport-PowerShellDataFileverwendet dieDefaultANSI-Codierung. ANSI verwendet auch das PowerShell-Modul, wenn es Quellcode aus Dateien liest.Import-Csv,Import-ClixmlundSelect-Stringgehen Sie davon ausUtf8, dass keine BOM vorhanden ist.
Zeichencodierung in PowerShell
In PowerShell (v7.1 und höher) unterstützt der Encoding-Parameter die folgenden Werte:
-
ascii: Verwendet die Codierung für den ASCII-Zeichensatz (7-Bit). -
ansi: Verwendet die Codierung für die ANSI-Codeseite der aktuellen Kultur. Diese Option wurde in PowerShell 7.4 hinzugefügt. -
bigendianunicode: Codiert im UTF-16-Format mit der Big-End-Byte-Reihenfolge. -
bigendianutf32: Codiert im UTF-32-Format mithilfe der Big-End-Byte-Reihenfolge. -
oem: Verwendet die Standardcodierung für MS-DOS- und Konsolenprogramme. -
unicode: Codiert im UTF-16-Format mithilfe der Little-Endian-Bytereihenfolge. -
utf7: Codiert im UTF-7-Format. -
utf8: Codiert im UTF-8-Format (keine BOM). -
utf8BOM: Codiert im UTF-8-Format mit Bytereihenfolgezeichen (BOM) -
utf8NoBOM: Codiert im UTF-8-Format ohne Byte Order Mark (BOM) -
utf32: Codiert im UTF-32-Format mithilfe der Little-Endian-Bytereihenfolge.
PowerShell ist standardmäßig für alle Ausgaben aktiviert utf8NoBOM .
Ab PowerShell 6.2 ermöglicht der Encoding-Parameter auch numerische IDs registrierter Codeseiten (z -Encoding 1251. B. ) oder Zeichenfolgennamen registrierter Codeseiten (z -Encoding "windows-1251". B. ). Weitere Informationen finden Sie in der .NET-Dokumentation für Encoding.CodePage.
Ab PowerShell 7.4 können Sie den ANSI Wert für den Codierungsparameter verwenden, um die numerische ID für die ANSI-Codeseite der aktuellen Kultur zu übergeben, ohne sie manuell angeben zu müssen.
Ändern der Standardcodierung
PowerShell verfügt über zwei Standardvariablen, die verwendet werden können, um das Standardcodierungsverhalten zu ändern.
$PSDefaultParameterValues$OutputEncoding
Weitere Informationen finden Sie unter about_Preference_Variables.
Ab PowerShell 5.1 rufen die Umleitungsoperatoren (> und >>) das Out-File Cmdlet auf. Aus diesem Grund können Sie die Standardcodierung für sie mithilfe der $PSDefaultParameterValues Einstellungsvariablen festlegen, wie in diesem Beispiel gezeigt:
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
Verwenden Sie die folgende Anweisung, um die Standardcodierung für alle Cmdlets mit dem Encoding-Parameter zu ändern.
$PSDefaultParameterValues['*:Encoding'] = 'utf8'
Wichtig
Wenn Sie diesen Befehl in Ihr PowerShell-Profil einfügen, wird die Einstellung als sitzungsübergreifende Einstellung festgelegt, die sich auf alle Befehle und Skripts auswirkt, die keine Codierung explizit angeben.
Ebenso sollten Sie solche Befehle in Ihre Skripts oder Module aufnehmen, die sie auf die gleiche Weise verhalten möchten. Die Verwendung dieser Befehle stellt sicher, dass sich Cmdlets auch dann, wenn sie von einem anderen Benutzer, auf einem anderen Computer oder in einer anderen Version von PowerShell ausgeführt werden, auf die gleiche Weise verhalten.
Die automatische Variable $OutputEncoding wirkt sich auf die Codierung aus, die PowerShell für die Kommunikation mit externen Programmen verwendet. Es hat keine Auswirkungen auf die Codierung, die die Ausgabeumleitungsoperatoren und PowerShell-Cmdlets zum Speichern in Dateien verwenden.