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.

War es hilfreich?

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_ts. 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.

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