Frage

Ich frage mich, was die Stack-Überlauf-Gemeinschaft denkt, wenn es darum geht, ein Projekt zur Schaffung (Denken in erster Linie c ++ hier) mit einem Unicode oder einem Multi-Byte-Zeichensatz.

  • Gibt es Profis Unicode gehen gerade von Anfang an, was bedeutet, alle Ihre Saiten werden im Wide-Format sein? Gibt es Performance-Probleme / größer Speicheranforderungen aufgrund eines Standard Verwendung eines größeren Charakter?

  • Gibt es ein Vorteil dieser Methode? Haben einige Prozessorarchitekturen Griff breite Zeichen besser?

  • Gibt es Gründe, Ihre zu machen Projekt Unicode, wenn Sie auf nicht planen Unterstützung zusätzlicher Sprachen?

  • Was Gründe müßte man ein Projekt mit einem Multi-Byte-Zeichensatz für das Erstellen?

  • Wie alle der oben genannten Faktoren collide in einer Hochleistungsumgebung (wie ein modernes Videospiel)?

War es hilfreich?

Lösung

Zwei Fragen würde ich sagen.

Zuerst Sie erwähnen nicht, was Plattform Sie Targeting. Obwohl neuere Windows-Versionen (Win2000, WinXP, Vista und Win7) beide Multibyte und Unicode-Versionen von Systemaufrufen unterstützen Strings verwenden, sind die Unicode-Versionen schneller (die Multibyte-Versionen sind Wrapper, dass Konvertiten in Unicode, die Unicode-Version nennen, dann wandle jede zurück Strings zurück zu mutlibyte). Also, wenn Sie eine Menge von diesen Arten von Anrufen machen die Unicode wird schneller sein.

Nur weil Sie nicht explizit unterstützt weitere Sprachen planen, sollten Sie noch Unicode-Unterstützung prüfen, ob Ihre Anwendung speichert und zeigt Text von den Benutzern selbst eingegeben. Nur weil Ihre Anwendung einsprachigen ist, folgt daraus nicht, dass alle Benutzer ist es zu einsprachigen sein wird. Sie können vollkommen glücklich sein, Ihre englischen Sprach GUI zu benutzen, aber vielleicht wollen Namen, Kommentare oder anderen Text in ihrer eigenen Sprache geben und sie richtig angezeigt.

Andere Tipps

Sie sprechen über das VC ++ Projekt hier einstellen, nicht wahr?

Das einzige, was sie betrifft, ist die Version von Win32-API-Aufrufen es endet exectuted werden. Zum Beispiel wird ein Aufruf an MessageBox als Aufruf an MessageBoxA bei der Multi-Byte-Einstellung am Ende, und MessageBoxW bei Unicode-Einstellung. Natürlich die Arten von String-Parameter an, die Funktionen das wird auch beeinflussen. Intern MessageBoxA ruft MessageBoxW nach der Zeichenfolge paramteres aus dem aktuellen Systemgebietsschema auf Unicode umzuwandeln.

Mein Rat ist, die Unicode-Einstellungen verwenden und Unicode-Strings zu Win32-API-Aufrufen übergeben. Das macht Sie nicht davon abhalten Strings in einer anderen Kodierung intern verwendet wird.

Die kurze Antwort (IMO, und ich habe falsch unter Beweis) ist, dass es wohl besser Plan für die schlechteren (oder am besten je nach Sichtweise) und jetzt tut Unicode.

Es sei denn, Ihre Anwendung sehr Zeichenfolge intensiv ist, geht dann direkt in Unicode nicht wirklich wichtig; im Fall von Spielen, soll es nicht ein großer Faktor sein, verglichen mit dem Rest des Motors.

Max.

Hier ist eine einfache Überlegung: sollte Ihr Programm zu arbeiten, wenn sie von Mr. verwendet wird ? ? ?? Sein Home-Verzeichnis könnte schwierig sein in ASCII darstellen.

  

Gibt es Profis Unicode gerade von Anfang an zu gehen,

Einige Jahre und eine Million Zeilen Code später, Sie gehen Sie zu wünschen hatte „Ja“ beantwortet.

  

was bedeutet, alle Saiten im Wide-Format sein?

wünschte, ich würde Microsoft beenden "Unicode" mit UTF-16 conflating.

Sie haben nicht alle die Saiten im Wide-Format zu speichern. Sie können UTF-8 stattdessen verwenden und einen kleineren Speicherbedarf (für lateinische Alphabet Sprachen) und die Abwärtskompatibilität mit 7-Bit-ASCII erhalten.

Der einzige Nachteil UTF-8 unter Windows ist, dass es nicht als ANSI-Codepage unterstützt wird, so dass Sie Ihre Strings in UTF-16 konvertieren müssen, um WinAPI Anrufe zu tätigen. Wie viele Unannehmlichkeiten, die Ursachen hängen davon ab, ob Sie ein Windows-Programm oder ein Programm schreiben, das nur auf Windows laufen passiert.

Die erste Antwort auf diese Frage sollte ... Antwort alles was Sie wissen müssen.

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