/ / Was sind die Nachteile, Unicode nicht in Windows zu verwenden? - C ++, C, Windows, Winapi, Unicode

Was sind die Nachteile, Unicode nicht in Windows zu verwenden? - C ++, C, Windows, Winapi, Unicode

Was sind die Nachteile, Unicode nicht unter Windows zu verwenden?

Mit Unicode, meine ich WCHAR und die breiten API-Funktionen. (CreateWindowW, MessageBoxW usw.)

Auf welche Probleme könnte ich stoßen, wenn ich das nicht verwende?

Antworten:

6 für die Antwort № 1

Ihr Code wird nicht in der Lage sein, mit Zeichen außerhalb der aktuell ausgewählten Codepage korrekt umzugehen, wenn Sie mit System-APIs arbeiten1.

Zu den typischen Problemen gehören nicht unterstützte Zeichenübersetzt in Fragezeichen, Unfähigkeit, Text mit Sonderzeichen zu verarbeiten, insbesondere Dateien mit "seltsamen Zeichen" in ihren Namen / Pfaden.

Außerdem sind einige neuere APIs nur in der "Wide" -Version vorhanden.

Schließlich wird jeder API-Aufruf mit Text geringfügig langsamer sein, da der "A"Versionen von APIs sind normalerweise nur dünne Wrapper um die"W"APIs, die die Parameter im Handumdrehen in UTF-16 umwandeln - also haben Sie etwas Overhead in Bezug auf eine" Ebene " W Anruf.


/>
  1. Nichts hält Sie davon ab, in einer Unicode-Codierung mit engem Zeichen (=> utf-8) innerhalb Ihrer Anwendung zu arbeiten, sondern in Windows "A"APIs Sprich nicht utf-8, so müssen Sie in UTF-16 konvertieren und die W Versionen sowieso.

3 für die Antwort № 2

Ich glaube, der Kern der ursprünglichen Frage war "sollte ich alle meine Windows-Apps mit" #define _UNICODE "kompilieren, und was ist die schlechte Seite, wenn ich nicht t?

Meine ursprüngliche Antwort war "Ja, sollten Sie. Wir haben 8-Bit-ASCII bewegt, und" _UNICODE "ist ein angemessener Standard für jeden modernen Windows-Code."

Für Windows glaube ich immer noch, dass das vernünftig istguter Rat. Aber ich habe meine ursprüngliche Antwort gelöscht. Weil ich nicht realisiert habe, bis ich meine eigenen Links gelesen habe, wie viel "UTF-16 ist ein ziemlich trauriger Zustand der Dinge" (wie Matteo Italia eloquent ausgedrückt hat).

Beispielsweise:

http://utf8everywhere.org/

Microsoft hat ... irrtümlicherweise 'Unicode' und 'widechar' als verwendet Synonyme für 'UCS-2' und 'UTF-16'. Außerdem, da utf-8 nicht sein kann als Encoding für Narrow-String WinAPI gesetzt, muss man sie kompilieren Code mit _UNICODE anstatt _MBCS. Windows C ++ - Programmierer sind haben gelernt, dass Unicode mit 'widechars' gemacht werden muss. Als Ergebnis von Dieses Chaos, sie sind jetzt zu den verwirrten über was ist das Richtige Sache über Text zu tun.

Ich empfehle diese drei Links:

MEINER BESCHEIDENEN MEINUNG NACH...