2-Byte (UCS-2) Wide-Strings unter GCC
-
04-10-2019 - |
Frage
, wenn mein Visual C ++ Projekt GCC Portierung, fand ich heraus, dass der Wchar_t Datentyp 4-Byte-UTF-32 standardmäßig. Ich könnte das mit einer Compiler-Option außer Kraft setzen, aber dann die ganze wcs * (Wcslen, wcscmp usw.) Teil des RTL ist unbrauchbar, da es 4-Byte-Wide-Strings übernimmt.
Im Moment habe ich 5-6 dieser Funktionen von Grund auf neu implementiert und #defined meine Implementierungen in Aber gibt es eine elegantere Möglichkeit -. Sagen wir, ein Build von GCC RTL mit 2-Byte-wchar-t ruhig sitzen irgendwo , verbunden zu warten?
Die spezifischen Aromen von GCC Ich bin nach Xcode unter Mac OS X sind, Cygwin, und die, die mit Debian Linux Etch kommt.
Lösung 4
reimplementiert 5-6 von häufigeren wcs Funktionen *, #defined meine Implementierungen in.
Andere Tipps
Aber ist es eine elegantere Möglichkeit - sagen wir, ein Build von GCC RTL mit 2-Byte-wchar-t ruhig irgendwo sitzen, verbunden zu warten
Nein. Dies ist ein plattformspezifische Problem, kein GCC Problem.
Das heißt, die Linux-Plattform ABI gibt an, dass wchar_t
32 Bit breit ist, also entweder Sie eine ganz neue Bibliothek verwenden (für die ICU ist eine beliebte Wahl) oder Port Code 4-Byte zu handhaben wchar_t
s. Alle Bibliotheken, dass Sie vielleicht verknüpfen wird auch ein 4-Byte-wchar_t
annehmen, und wird Pause, wenn Sie verwenden GCC -fshort-wchar
.
Aber auf Linux speziell, fast jeder auf UTF-8 für alle Multibyte-Kodierungen standardisiert hat.
Sehen Sie sich die ICU-Bibliothek . Es ist eine tragbare Bibliothek mit einem UTF-16-API.
Wie Sie vielleicht bemerkt haben, ist wchar_t Implementierung definiert. Es gibt keine Möglichkeit für tragbare Arbeit mit diesem Datentyp.
Linux-Systeme im Allgemeinen hatten den Vorteil, gewinnt später Unicode-Unterstützung, nachdem die gesamten UCS-2-Debakel eine nicht so tolle Idee erklärt wurde, und die Verwendung von UTF-8 als Kodierung. Alle System-APIs funktionieren nach wie vor auf char * und sind Unicode sicher.
Ihre besten Wetten sind eine Bibliothek verwenden, die dies für Sie verwaltet. Qt, ICU, etc
Beachten Sie, dass Cygwin verfügt über einen 2-Byte-Wchar_t zu einfachem Windows machen kämmt.