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 unter 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 Encoding Parameter, 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 parameter Encoding 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 Textdatenstroms, die angeben, welche Unicode-Codierung für die Daten verwendet wird. Weitere Informationen finden Sie in der Dokumentation zur Byte-Reihenfolgemarke .
In Windows PowerShell erstellt jede Unicode-Codierung mit Ausnahme von UTF7immer eine BOM. PowerShell (v6 und höher) verwendet standardmäßig utf8NoBOM für alle Textausgaben.
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 Datei, die mit UTF8NoBOMcodiert wird. 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 fälschlicherweise als in der veralteten „ANSI“-Codepage kodiert. 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 die BOM behandelt wird.
Zeichencodierung in Windows PowerShell
In PowerShell 5.1 unterstützt der parameter Encoding die folgenden Werte:
-
AsciiVerwendet ascii-Zeichensatz (7-Bit). -
BigEndianUnicodeVerwendet UTF-16 mit der Big-Endian-Bytereihenfolge. -
BigEndianUTF32verwendet UTF-32 mit der Big-Endian-Bytereihenfolge. -
ByteCodiert eine Reihe von Zeichen in eine Bytesequenz. -
DefaultVerwendet die Codierung, die der aktiven Codepage des Systems entspricht (in der Regel ANSI). -
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.
Anmerkung
Die Verwendung einer beliebigen Unicode-Kodierung, außer UTF7, erstellt immer ein BOM.
Für Cmdlets, die die Ausgabe in Dateien schreiben:
Out-Fileund die Umleitungsoperatoren>und>>erzeugen UTF-16LE, was sich insbesondere vonSet-ContentundAdd-Contentunterscheidet.New-ModuleManifestundExport-Clixmlwerden auch UTF-16LE-Dateien erstellen.Wenn die Zieldatei leer ist oder nicht vorhanden ist, verwenden
Set-ContentundAdd-ContentdieDefault-Codierung.Defaultist die Kodierung, die durch die veraltete ANSI Code-Seite des aktiven Systemgebietsschemas festgelegt ist.Export-CsverstelltAsciiDateien, verwendet jedoch bei Verwendung Append-Parameters unterschiedliche Codierung (siehe unten).Export-PSSessionerstellt UTF-8-Dateien standardmäßig mit BOM.New-Item -Type File -Valueerstellt eine UTF-8-Datei ohne BOM.Send-MailMessageverwendet standardmäßigAsciiCodierung.Start-TranscripterstelltUtf8Dateien mit einer BOM. Wenn der parameter "Append" verwendet wird, kann die Codierung unterschiedlich sein (siehe unten).
Für Befehle, die an eine vorhandene Datei angefügt werden:
Der Umleitungsoperator
Out-File -Appendund>>versuchen nicht, die Codierung des Inhalts der bestehenden Zieldatei anzupassen. Stattdessen verwenden sie die Standardcodierung, es sei denn, der Encoding Parameter wird verwendet. Sie müssen beim Anfügen von Inhalten die ursprüngliche Codierung der Dateien verwenden.Wenn kein expliziter Encoding Parameter vorhanden ist, erkennt
Add-Contentdie vorhandene Codierung und wendet sie automatisch auf den neuen Inhalt an. Wenn der vorhandene Inhalt keine BOM aufweist, wirdDefaultANSI-Codierung verwendet. Das Verhalten vonAdd-Contentist in PowerShell (v6 und höher) identisch, mit der Ausnahme, dass die StandardcodierungUtf8ist.Export-Csv -Appendentspricht der vorhandenen Codierung, wenn die Zieldatei eine BOM enthält. Wenn keine BOM vorhanden ist, wird die KodierungUtf8verwendet.Start-Transcript -Appendentspricht der vorhandenen Codierung von Dateien, die eine BOM enthalten. Wenn keine BOM vorhanden ist, wird standardmäßigAsciiCodierung 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 wird auch von der PowerShell-Engine verwendet, wenn sie Quellcode aus Dateien liest.Import-Csv,Import-ClixmlundSelect-StringnehmenUtf8an, wenn 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 Kodierung für die ANSI-Codepage der aktuellen Kultur. Diese Option wurde in PowerShell 7.4 hinzugefügt. -
bigendianunicode: Codiert im UTF-16-Format mithilfe der Big-Endian-Byte-Reihenfolge. -
bigendianutf32: Codiert im UTF-32-Format unter Verwendung der Big-Endian-Byte-Reihenfolge. -
oem: Verwendet die Standardcodierung für MS-DOS- und Konsolenprogramme. -
unicode: Codiert im UTF-16-Format in 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 Byte Order Mark (BOM) -
utf8NoBOM: Codiert im UTF-8-Format ohne Byte Order Mark (BOM) -
utf32: Kodiert im UTF-32-Format mit der Little-Endian-Bytereihenfolge.
PowerShell verwendet standardmäßig utf8NoBOM für alle Ausgabeformate.
Ab PowerShell 6.2 ermöglicht der parameter Encoding auch numerische IDs registrierter Codeseiten (z. B. -Encoding 1251) oder Zeichenfolgennamen registrierter Codeseiten (z. B. -Encoding "windows-1251"). 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 parameter Encoding 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 cmdlet Out-File auf. Aus diesem Grund können Sie die Standardcodierung von ihnen mit der Einstellungsvariablen $PSDefaultParameterValues festlegen, wie in diesem Beispiel gezeigt:
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
Verwenden Sie die folgende Anweisung, um die Standardcodierung für alle Cmdlets zu ändern, die den parameter Encoding aufweisen.
$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, damit sie sich auf die gleiche Weise verhalten. 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 von PowerShell aus, die für die Kommunikation mit externen Programmen verwendet wird. Es hat keine Auswirkungen auf die Codierung, die die Ausgabeumleitungsoperatoren und PowerShell-Cmdlets zum Speichern in Dateien verwenden.