Frage

Wir haben Probleme Einstellungsfenster Bildunterschriften kyrillisch oder japanischen Zeichen. Entweder wir sehen Fragezeichen oder zufälligen Müll, aber nicht den Text, den wir wollen. Wir haben versucht, verschiedene Kodierungen verwenden, SetWindowText (), SetWindowTextW (), SetWindowTextA (), und so weiter. Wir können nicht einmal bekommen sie, indem ein Stringliteral zu SetWindowText ().

arbeiten

Unsere Installation von Windows scheint alles zu haben, es braucht - Internet Explorer und Firefox zeigen tun kyrillisch und japanische Untertitel richtig, zum Beispiel. Also ich bin ziemlich sicher, dass wir nicht die richtige Codierung / Methodenkombination zu finden. Irgendwelche Vorschläge?

War es hilfreich?

Lösung

SetWindowText()? Haben Sie kompilieren Ihre Anwendung als Unicode? Wenn nicht, ist SetWindowText () entspricht SetWindowTextA(), was wiederum beschränkt sich auf Ihre aktuelle Systemgebietsschema (auch bekannt als „Sprache für Nicht-Unicode-Anwendungen“).

Auch, wie haben Sie CREATE Ihr Fenster? Mit Hilfe eines explizit Unicode-fähigen API wie CreateWindowExW()? Wenn nicht, stellen Sie sicher, dass Ihr Programm als Unicode kompiliert wird.

Wenn Ihr Programm nicht als Unicode kompiliert, können Sie wollen entweder Ihre „Sprache für Nicht-Unicode-Anwendungen“ in CP / Regionaleinstellungen ändern. Neustart erforderlich. Oder noch einfacher: Verwenden Sie MS AppLocale ein kyrillisches Systemgebietsschema zu simulieren

Andere Tipps

Das Problem, das Sie (bei einer Vermutung) haben, ist, dass das Top-Level-Rahmenfenster der Anwendung ist ein ANSI-Fenster. Unter der Haube, wenn Sie ein Fenster (mit Create () oder CreateWindowEx ()) eine Fensterklasse erstellen müssen versorgt werden. Diese Fensterklasse bestimmt die Eigenschaften des Fensters, einschließlich, ob es in der Standardeinstellung ANSI-Nachrichten oder Unicode-Nachrichten akzeptiert. Im Gegenzug wird dieser eingestellt wird, ob Sie (oder Ihr Framework) durch den Aufruf RegisterClassExA die Fensterklasse registrieren () oder RegisterClassExW ().

Was ist mit ziemlicher Sicherheit happing ist, dass Ihre Fenster der obersten Ebene der Klasse mit RegisterClassExA registriert wird (). Dies bedeutet, dass die Standard-Fensterprozedur für das Fenster wird alle Unicode-Strings in Nachrichten zu ANSI übersetzen, bevor sie die Verarbeitung, also die Fragezeichen und ungeradee Zeichen überall.

Die einfachste Lösung für all dies ist nur Ihre Anwendung Unicode macht überall (in der Regel durch die Definition _UNICODE getan). Der andere Weg ist, um herauszufinden, wo RegisterClassEx () aufgerufen wird, und es RegisterClassExW machen (). Dies kann dazu führen, ANSI / Unicode Probleme mit anderen Nachrichten, aber es sollte (theoretisch zumindest) Arbeit. Natürlich wird jede Weise Windows 9X brechen, wenn das ein Problem ist.

Wenn all dies horrend kompliziert klingt, sie ist nicht falsch ...

Sie haben Ihre Anwendung mit _UNICODE definiert kompilieren. Ansonsten sind alle Fenster werden noch MBCS sein und nicht utf-16 und daher nicht kyrillisch oder japanischen Schriftzeichen zeigen kann, wenn die Codepage nicht übereinstimmt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top