Beachten Sie, dass ein bestimmtes System über zwei aktive Codepages von Interesse verfügt , die durch die Legacy-Einstellung namens language für Nicht-Unicode-Programme bestimmt werden , die früher als Systemgebietsschema bezeichnet wurde (Hintergrundinformationen finden Sie im unteren Abschnitt):
- die OEM -Codepage zur Verwendung durch ältere Konsolenanwendungen ,
- Die ANSI -Codepage zur Verwendung durch ältere GUI- Anwendungen.
Hinweis: Es gibt zwei weitere Codepages, die jedoch nur noch selten verwendet werden und daher hier nicht behandelt werden: den EBCDIC- Code und die Mac- Codepage (vor OS X) - siehe WinAPI-Dokumente .
Die aktive OEM-Codepage kann am einfachsten über abgerufen werden chcp
, wie in der hilfreichen Antwort von Forgotten Semicolon gezeigt - vorausgesetzt, sie wurde in der Sitzung mit nicht explizit geändert chcp <codePageNum>
.
Das Ermitteln der aktiven ANSI-Codepage ist nicht so einfach, aber PowerShell kann auch beim Ermitteln des Namens und der Sprache des Systemgebietsschemas helfen :
In Windows 8+ / Windows Server 2012+ : Verwenden Sie das Get-WinSystemLocale
Cmdlet:
Get-WinSystemLocale | Select-Object Name, DisplayName,
@{ n='OEMCP'; e={ $_.TextInfo.OemCodePage } },
@{ n='ACP'; e={ $_.TextInfo.AnsiCodePage } }
Hinweis: Die Verwendung ist möglicherweise verlockend, spiegelt [cultureinfo]::CurrentCulture.TextInfo.ANSICodePage
jedoch nicht unbedingt die systemweit aktive ANSI-Codepage wider . Stattdessen ist es die ANSI-Codepage, die dem Gebietsschema (der Kultur) des aktuellen Benutzers zugeordnet ist und möglicherweise unterschiedlich ist.
Auf einem US-englischen System ergibt sich Folgendes:
Name DisplayName OEMCP ACP
---- ----------- ----- ---
en-US English (United States) 437 1252
OEMCP
ist die OEM-Codepage, ACP
die ANSI-Codepage.
Eine registrierungsbasierte Methode , die auch auf älteren Systemen bis Windows XP funktioniert :
# Get the code pages:
Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\Nls\CodePage |
Select-Object OEMCP, ACP
Auf einem US-englischen System ergibt sich Folgendes:
OEMCP ACP
----- ---
437 1252
Wenn Sie auch den [freundlichen] Namen und die LCID des Systemgebietsschemas erhalten möchten (beachten Sie jedoch, dass LCIDs veraltet sind):
[Globalization.CultureInfo]::GetCultureInfo([int] ('0x' + (
Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Nls\Language' Default
).Default)
)
Auf einem US-englischen System ergibt sich Folgendes:
LCID Name DisplayName
---- ---- -----------
1033 en-US English (United States)
Hintergrundinformationen :
Das Systemgebietsschema ist der Legacy-Name für die Sprache, die jetzt beschreibender als Nicht-Unicode-Programme bezeichnet wird (siehe NLS-Terminologie ). Wie die Namen andeuten, gilt Folgendes:
Die Einstellung gilt nur für ältere Programme (Programme, die Unicode nicht unterstützen).
Es gilt systemweit , unabhängig von den Ländereinstellungen eines bestimmten Benutzers , und es sind Administratorrechte erforderlich, um es zu ändern.
Es ist wichtig zu beachten, dass dies eine Legacy- Einstellung ist , da Codepages nicht mehr für Programme gelten, die Unicode intern verwenden und die Unicode-Versionen der Windows-API aufrufen.
Insbesondere werden die aktiven Codepages bestimmt , dh die standardmäßig verwendete Zeichenkodierung :
Die ANSI-Codepage , die verwendet werden soll, wenn Nicht-Unicode-Programme die Nicht-Unicode-Versionen (ANSI) der Windows-API aufrufen, insbesondere die ANSI-Version der TextOut
Funktion zum Übersetzen von Zeichenfolgen in und aus Unicode, die insbesondere bestimmt, wie die Zeichenfolgen des Programms in der GUI .
Die OEM-Codepage , die standardmäßig in Konsolenfenstern aktiviert werden soll chcp
.
- Die aktive Codepage eines Konsolenfensters bestimmt, wie die Tastatureingabe und -ausgabe von Konsolenanwendungen interpretiert und angezeigt wird .
- Beachten Sie, dass dies bedeutet, dass sogar die Ausgabe von Unicode- Konsolenanwendungen in die aktive Codepage übersetzt wird, was zu Informationsverlust führen kann. Die Verwendung einer Pseudocodeseite
65001
, die die UTF-8-Codierung von Unicode darstellt, ist eine Lösung. Dies kann jedoch dazu führen, dass ältere Befehlszeilenprogramme Daten falsch interpretieren und sogar fehlschlagen. Weitere Informationen finden Sie in dieser StackOverflow-Antwort .
- Im Gegensatz zu der ANSI - Codepage, Sie können die aktive [OEM] Codepage für ein bestimmtes Konsolenfenster auf Anfrage ändern ; Um beispielsweise zur OEM-Codepage zu wechseln
850
, führen Sie sie chcp 850
in cmd.exe
und $OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = [text.encoding]::GetEncoding(850)
in PowerShell aus.
- Außerdem werden die selten mehr verwendeten EBCDIC- und Mac- Codepages verwendet.
Trotz des Wortes locale in dem älteren Begriff verwendet , und die Wortsprache in der laufenden Funktionsperiode:
Die einzigen Aspekte, die von der Einstellung gesteuert werden, sind die aktiven Codepages und die Standard- Bitmap-Schriftarten , nicht auch andere Elemente eines Gebietsschemas (die von den Gebietsschemaeinstellungen auf Benutzerebene gesteuert werden).
Eine bestimmte Codepage wird normalerweise von vielen Gebietsschemas gemeinsam genutzt und umfasst mehrere Sprachen. Beispielsweise wird die weit verbreitete 1252
Codepage von vielen westeuropäischen Sprachen verwendet, einschließlich Englisch.
Wenn Sie die Einstellung jedoch über die Systemsteuerung ändern, wählen Sie die Einstellung über ein bestimmtes Gebietsschema aus.
Eine Liste aller Windows-Codepages finden Sie unter https://docs.microsoft.com/en-us/windows/desktop/Intl/code-page-identifiers
chcp
Sie die aktive OEM -Codepage erhalten. Wie mklement in seiner Antwort feststellt, wird von Windows immer eine andere aktive Codepage verwendet, die ANSI-Codepage. Weitere Informationen finden Sie in der Antwort von mklement .