UTF8-konformes programmieren



  • Hallo miteinander.

    Ausgangslage:

    Ich will eine art Inputprüfer-Bibliothek schreiben. Diese sollte UTF8-Zeichen(3 Byte müsste ja die größte sein) unterstützen. ein normaler char ist ja 1 Byte groß.
    Nun Frage, wie sollte ich meine Bib. aufbauen (unter Linux), damit diese C++ und C kompatibel sein kann und gesammten UTF-8 raum abdeckt?

    Da ja C mit "unterstützt" werden soll muss ich einen entsprechenden Datentyp benutzen. Da ich mich etwas schlau gemacht hab,e habe ich etwas von wstring (cpp) und wchar (c) mitbekommen.
    Jedoch weiss ich nich ob ich diese von Anfang an benutzen muss oder erst später konvertieren kann.

    In wiefern ist eigentlich iconv() von nutzen in diesem bereich? man kann ja dort auch von z.b. ISO-8859-1 auf UTF-8 konvertieren, jedoch dann warsch, da ja char typ zurückgegeben wird nur 8bit. Oder bin ich da etwa auf n holzweg?

    Wäre nett wenn mir dazu jemand info geben kann ^^.



  • Leider ist Unicode die reinste Frickelei. Vergiss es besser und such dir was anderes...

    Wir sind Opfer von organisierter Faul- und Dummheit.

    😞



  • Gr33b0 schrieb:

    Diese sollte UTF8-Zeichen(3 Byte müsste ja die größte sein) unterstützen.

    Nö.
    http://de.wikipedia.org/wiki/UTF8

    1. sind es 4 Byte
    2. sind es bis zu 4 Byte

    Das heißt dass ein UTF8-Zeichen variabel in der Länge ist! Und das ist das Problem 😕





  • danke für die nachrichten ^^

    hmmm na dolle 😕 leider wird auf arbeit viel mit utf8 gemacht.

    ich werd mir mal das bezüglich sourceforge anschaun.



  • Vielleicht ist da bei C++0x mit Unicode-string-Literalen was zu holen.



  • Gr33b0 schrieb:

    Ich will eine art Inputprüfer-Bibliothek schreiben. Diese sollte UTF8-Zeichen(3 Byte müsste ja die größte sein) unterstützen. ein normaler char ist ja 1 Byte groß.
    Nun Frage, wie sollte ich meine Bib. aufbauen (unter Linux), damit diese C++ und C kompatibel sein kann und gesammten UTF-8 raum abdeckt?

    Also wie das in C gehen soll, weiß ich nicht. In C++ solltest Du dafür sorgen, dass der Anwender gar nicht bemerkt, dass da irgendwo UTF8 daher kommt. Ich nehme mal an, dass sich die UTF8-Zeichen in Dateien befinden. Um diese korrekt einzulesen, benötigst Du eine passenden std::basic_streambuf< wchar_t > (bzw. eine Ableitung mit einer passende UTF8-Codecvt-Facette).

    Der Anwender muss statt char wchar_t nutzen (also z.B. wstring statt string), wenn Du wirklich alle Zeichen benötigst. Theoretisch ginge auch char, aber dann hast Du einen eingeschränkten Funktionsumfang.

    Auf keinen Fall sollte der Anwender sich intern mit UTF8 herumschlagen müssen; dann hätte Deine Library versagt!

    Gruß
    Werner



  • Kann Werner voll zustimmen. Wenn du es etwas ausführlicher brauchst, findest du ab hier einen recht umfangreichen Artikel.



  • Da das für Arbeit ist, wird es von nem andren programm abgerufen, das über cgi dann daten (Telefonnummer ...) vom client bekommt.
    Da die CGI-Programme UTF-8 konform sind, muss die lib auch sein.
    (Bin erst rechd neu in der Firma / In dem Bereich tätig)

    Was ich auf jeden fall noch weiss is, dass die Buffer in BYTE (Macro auf usigned long soweit ich weiss) gespeicherd werden.

    weiss einer wie ich dann evtl noch dann mit wstring/wchar_t regular-expression abfragen machen kann? ich kenne für linux nur gnu regex und prcecpp, aber beides können nur char* handlen (prcecpp kann jedoch auch UTF-8 .... aba wie o_O? ).



  • weiss einer wie ich dann evtl noch dann mit wstring/wchar_t regular-expression abfragen machen kann?

    Standard-C++ kann das, schau dir mal regex aus TR1 [1] an. Oder wenn ihr kein TR1 benutzen dürft oder zur Verfügung habt, dann tut es auch boost::regex [2]. Das Tutorial von Boost kann man auch für tr1::regex nutzen.

    [1] http://msdn.microsoft.com/en-us/library/bb982198.aspx
    [2] www.boost.org/doc/libs/release/libs/regex/


Anmelden zum Antworten