Wir wissen, dass es eine Anwendung namens AppLocale gibt, die die Codepage von Nicht-Unicode-Anwendungen ändern kann, um Probleme bei der Textanzeige zu lösen.
Aber es gibt ein Programm, dessenCodepage für die rechte Anzeigeist UTF-8, was bedeutetsein Text sollte als UTF-8 angezeigt werden, sondern Windowszeigt es als native Codepage anund macht den Text unlesbar. Das scheint komisch, weil es fast alle Länder und Regionen gibt, aber ohne UTF-8. Ich denke, es ist ein Fehler, weil die Programmierer möglicherweise Englisch verwenden und das Testen von Problemen bei der Anzeige nicht-englischer Texte ignorieren. Ich glaube nicht, dass der Hersteller das beheben wird, und ich möchte es selbst beheben.
Ist es möglich, Nicht-Unicode-Ausgaben mithilfe von Software wie AppLocale als UTF-8 einzustellen? Standardmäßige Nicht-Unicode-Ausgaben sind native Codepages. Wie kann ich die native Codepage auf UTF-8 einstellen?
Antwort1
Bisher war dies nicht möglich, da
Microsoft gab an, dass ein UTF-8-Gebietsschema einige Funktionen beschädigen könnte (ein mögliches Beispiel ist
_mbsrev
), da diese so geschrieben wurden, dass bei Multibyte-Kodierungen nicht mehr als 2 Byte pro Zeichen verwendet werden. Daher konnten Codepages mit mehr Byte wie GB 18030 (cp54936) und UTF-8 bislang nicht als Gebietsschema festgelegt werden.https://en.wikipedia.org/wiki/Unicode_in_Microsoft_Windows#UTF-8
Es gibt jedoch eine„Beta: Verwenden Sie Unicode UTF-8 für weltweite Sprachenunterstützung“Kontrollkästchen seit Windows 10 Insider Build 17035 zum Einstellen der lokalen Codepage auf UTF-8
Siehe auch
- Ändern der ANSI- und OEM-Codepage in Windows
- Windows 10 Insider Preview Build 17035 unterstützt UTF-8 als ANSI
Allerdings ist der Support zu diesem Zeitpunkt noch fehlerhaft
- Einfrierproblem in Windows 10 1803 bei Verwendung von UTF-8 als Standardcodepage
- Wenn die Unicode-Betaunterstützung in Windows 10 aktiviert ist, können Add-Ons nicht installiert werden
- Die UTF-8-Unterstützung für Einzelbyte-Zeichensätze ist in Windows noch in der Betaphase und kann viele Anwendungen beschädigen, die dies nicht erwarten.
- Build schlägt mit internem Fehler in MSVC fehl
Aktualisieren:
Microsoft hat außerdem die Möglichkeit hinzugefügt, dass Programme das UTF-8-Gebietsschema verwenden können, ohne das oben genannte UTF-8-Beta-Flag setzen zu müssen. Sie können das/execution-charset:utf-8
oder/utf-8
Optionen beim Kompilieren mit MSVC oder Festlegen der ActiveCodePage-Eigenschaft in appxmanifest
Sie können das UTF-8-Gebietsschema auch in älteren Windows-Versionen verwenden, indem Sie es mit der entsprechenden C-Laufzeit verknüpfen.
Ab Windows 10 Build 17134 (Update April 2018) unterstützt die Universal C Runtime die Verwendung einer UTF-8-Codepage. Dies bedeutet, dass
char
an C-Runtime-Funktionen übergebene Zeichenfolgen Zeichenfolgen in der UTF-8-Kodierung erwarten. Um den UTF-8-Modus zu aktivieren, verwenden Sie bei Verwendung von „UTF-8“ als Codepagesetlocale
. Beispielsweisesetlocale(LC_ALL, ".utf8")
wird die aktuelle standardmäßige Windows-ANSI-Codepage (ACP) für das Gebietsschema und UTF-8 für die Codepage verwendet....
Um diese Funktion auf einem Betriebssystem vor Windows 10, wie z. B. Windows 7, zu verwenden, müssen SieApp-lokale Bereitstellungoder statisch verknüpfen, indem Sie Version 17134 des Windows SDK oder höher verwenden. Für Windows 10-Betriebssysteme vor 17134 wird nur statisches Verknüpfen unterstützt.
Antwort2
Nach dem, was ich über Microsoft gelesen habeAppLocale-Tool auf Wikipedia, das Tool kann Ihre Codepage NICHT in UTF-8 ändern.Es funktioniert nur mit Nicht-Unicode-Anwendungen, aber UTF-8 ist Teil des Unicode-Standards.
Im Hintergrund unterscheidet sich die Unicode-Verarbeitung von Nicht-ASCII-Zeichen erheblich von der Nicht-Unicode-Verarbeitung. Obwohl es also möglich ist, zwischen Nicht-Unicode-Codepages zu wechseln (dies macht AppLocale), ist es NICHT möglich, zwischen Unicode und Nicht-Unicode zu wechseln, ohne dass der Hersteller der Anwendung Änderungen vornimmt.
Antwort3
Nur um es hier zu erwähnen: In Windows 10 17133 gibt es jetzt eine Beta-Option zur Verwendung von UTF-8 für weltweiten Support. Bei Nicht-Unicode-Programmen hilft sie mir derzeit jedoch nicht, aber sie wird in dem Popup angezeigt, in dem ich das Gebietsschema für Nicht-Unicode-Programme ändern kann.
Vielleicht arbeiten sie an einer Lösung, damit die Notwendigkeit, das Gebietsschema für Nicht-Unicode-Programme ändern zu müssen, nicht mehr besteht.