Also arbeite ich an einem Plain-C-Projekt (ANSI 9899: 1999) und versuche herauszufinden, wo ich anfangen soll: Unicode, UTF-8 und all dieser Jazz.
Genauer gesagt ist es ein Sprachinterpreterprojekt, und ich habe zwei primäre Orte, an denen ich mit Unicode umgehen muss: das Einlesen von Quelldateien (die Sprache unterstützt angeblich Unicode-IDs und ähnliches) und von 'String'-Objekten.
Ich bin vertraut mit all den offensichtlichen Grundlagen zu Unicode, UTF-7/8/16/32 & amp; UCS-2/4, usw. und so weiter ... Ich suche hauptsächlich nach nützlichen, C-spezifischen (also bitte keine C ++ oder C #, das ist alles, was hier auf SO zuvor dokumentiert wurde) Ressourcen zu meinem 'nächsten Schritte, um Unicode-freundliche Sachen zu implementieren ... in C.
Alle Links, Hilfeseiten, Wikipedia-Artikel, Beispielcode, sind alle sehr willkommen. Ich werde auch versuchen, eine Liste solcher Ressourcen hier in der ursprünglichen Frage zu halten, für jeden, der später darüber passiert.
man 3 iconv
(sowie iconv_open
und iconvctl
) libbasekit
, das leichte Unicode-Bearbeitungswerkzeuge zu enthalten scheint Internationale Komponenten für Unicode bietet eine portable C-Bibliothek für die Handhabung von Unicode. Hier ist ihr Elevator Pitch für ICU4C:
Die C- und C ++ - Sprachen und viele Betriebssystemumgebungen bieten keine vollständige Unterstützung für Unicode- und standardkonforme Textverarbeitungsdienste. Obwohl einige Plattformen gute Dienste für die Unicode-Textverarbeitung bieten, kann der Code für portable Anwendungen sie nicht nutzen. Die ICU4C-Bibliotheken füllen diese Lücke. ICU4C bietet eine offene, flexible, portable Grundlage für Anwendungen, die für ihre Anforderungen an die Globalisierung der Software verwendet werden. ICU4C verfolgt eng Industriestandards, einschließlich Unicode und CLDR (Common Locale Data Repository).
GLib hat einige Unicode-Funktionen und ist eine ziemlich leichte Bibliothek. Es ist nicht in der Nähe der gleichen Funktionalität, die ICU bietet, aber es könnte für einige Anwendungen gut genug sein. Die anderen Eigenschaften von GLib sind auch für portable C-Programme gut.
GTK + ist auf GLib aufgebaut. GLib stellt die fundamentalen algorithmischen Sprachkonstrukte zur Verfügung, die üblicherweise in Anwendungen dupliziert werden. Diese Bibliothek verfügt über Funktionen wie (diese Liste ist keine umfassende Liste):
- Objekt und Typsystem
- Hauptschleife
- Dynamisches Laden von Modulen (d. h. Plug-Ins)
- Thread-Unterstützung
- Timer-Unterstützung
- Speicherzuordner
- Threaded-Warteschlangen (synchron und asynchron)
- Listen (einzeln verlinkt, doppelt verknüpft, double ended)
- Hashtabellen
- Arrays
- Bäume (N-ary und binär balanciert)
- String-Dienstprogramme und Zeichensatzbehandlung
- Lexikalischer Scanner und XML-Parser
- Base64 (Kodierung und Dekodierung)
Ich denke, eine der interessanten Fragen ist - was sollte dein kanonisches internes Format für Strings sein? Die 2 offensichtlichen Entscheidungen (zumindest für mich) sind
a) utf8 in Vanilla C-Strings b) utf16 in unsignierten kurzen Arrays
In früheren Projekten habe ich immer utf-8 gewählt. Warum ; weil es der Weg des geringsten Widerstands in der C-Welt ist. Alles, mit dem Sie interagieren (stdio, string.h usw.) funktioniert gut.
Als nächstes kommt - welches Dateiformat. Das Problem hierbei ist, dass es für Ihre Benutzer sichtbar ist (es sei denn, Sie stellen den einzigen Editor für Ihre Sprache zur Verfügung). Hier denke ich, du musst nehmen, was sie dir geben und versuchen, durch Spähen zu erraten (Byte Order Marks Help)
Tags und Links string c unicode encoding unicode-string