Microsoft Windows bietet verschiedene Funktionen zum Abfragen der aktuellen Codepage: GetACP
, GetConsoleOutputCP
, GetConsoleCP
.Warum ANSI-Code-Seite und Konsolencode-Seite sind unterschiedlich?
Sie geben unterschiedliche Werte zurück. Zum Beispiel auf meiner Maschine, GetACP
kehrt 1252 während GetConsoleOutputCP
und GetConsoleCP
Rückkehr 437.
(Wir auch chcp
auf der Kommandozeile ausgeführt werden können und erhalten 437)
- Warum bietet Windows-verschiedenen Codepages für Konsole und nicht-Konsole?
- Wie werden diese Codeseiten pro Maschine ermittelt?
- Wie ist die Beziehung zwischen Codepages auf demselben Computer? Gibt es eine Korrelation zwischen den Konsolenseiten und den Nicht-Konsolenseiten? Haben Maschinen mit Codepage 1252 immer eine Codepage von 437?
Der Hintergrund für diese Frage ist eine Fehlermeldung von Visual Studio C++:
error C2855: command-line option '/source-charset' inconsistent with precompiled header
error C2855: command-line option '/execution-charset' inconsistent with precompiled header
Diese Fehler aufgetreten ist, wenn die vorkompilierte Header-Datei mit einer anderen Standard-Code-Seite als die CPP-Datei erstellt wurde, das war mit ihnen (aus welchem Grund auch immer).
Vom MSDN docs:
Wenn keine Byte-Reihenfolge-Marke gefunden wird, nimmt es die Quelldatei mit der aktuellen Benutzer-Codepage codiert ist, es sei denn, Sie mit dem ein Zeichensatz Namen oder Codepage angeben/Quelle-Zeichensatz-Option.
So versuche ich, welche Codepage sie einer beziehen, um herauszufinden, auf, die von GetACP
oder die anderen zurückgegeben ...
Für den Downvoter, wenn Sie ohne eine Erklärung downvote, das ist Ihr Vorrecht. Aber es ist hilfreicher, zumindest ein bisschen Feedback zu geben, um mich wissen zu lassen, was falsch ist. Wenn es eine Möglichkeit für mich gibt, die Antwort zu verbessern, oder wenn Ihre Gründe signifikant genug sind, sollte ich diese Antwort löschen. – eryksun
Der Downvoter ist wahrscheinlich Trolling. Die Frage wurde auch ohne Erklärung abgelehnt. Das letzte, was du erwähnt hast, hat mich verwirrt. Haben wir neben ANSI und OEM noch andere Codepages? Laut [dieser MSDN-Seite] (https://msdn.microsoft.com/en-us/library/windows/desktop/dd373761 (v = vs.85) .aspx) gibt 'LOCALE_IDEFAULTANSICODEPAGE' die ANSI-Codepage und 'LOCALE_IDEFAULTCODEPAGE' zurück 'gibt die OEM-Codepage zurück. In welchem Fall würden sie sich von den Codepages unterscheiden, die von "GetACP", "GetConsoleCP" usw. zurückgegeben werden? –
In den meisten Windows-Sprachumgebungen sind ANSI- und OEM-Codepages definiert. Das Gebietsschema des Benutzers entspricht nicht unbedingt dem Gebietsschema des Systems. Sie können die Regionsanwendung in der Systemsteuerung verwenden, um das Benutzergebietsschema (d. H. "Format") zu ändern. 'GetLocaleInfoEx' wird dies dynamisch in den Werten reflektieren, die für' LOCALE_IDEFAULTANSICODEPAGE' und 'LOCALE_IDEFAULTCODEPAGE' (OEM) zurückgegeben werden. Das Ändern des Systemgebietsschemas (region-> administrativ) erfordert jedoch einen Neustart, um eine Änderung zu sehen, die sich in 'GetACP()' und 'GetOEMCP()' widerspiegelt. – eryksun