Wie kann man einen Text nach UTF8 konvertieren?



  • die meisten Lösungen hatten nur den Weg von iso nach utf8, aber nicht von utf8 nach iso.
    Die einzige Lösung, die das doch hat, ist diese hier: http://www.gnu.org/software/libiconv/

    Ich will aber keine ganze library, sondern eigentlich nur eine Funktion, die mein Ergebnis liefert und diese habe ich noch nicht gefunden.



  • vielleischt sowas?

    #define LOWER_6_BIT(u)    ((u) & 0x003f)
    #define BIT7(a)           ((a) & 0x80)
    #define BIT6(a)           ((a) & 0x40)
    
    // Converts UTF-8 to wide char
    int UTF8ToWcharT (char *lpSrcStr, int cchSrc, wchar_t *lpDestStr, int cchDest)
    {
       int nTB = 0;    
       int cchWC = 0;  
       char *pUTF8 = lpSrcStr;
       char UTF8;
    
       while ((cchSrc--) && ((cchDest == 0) || (cchWC < cchDest)))
       {
           if (BIT7(*pUTF8) == 0)
           {
               if (cchDest)
                   lpDestStr[cchWC] = (wchar_t)*pUTF8;
               cchWC++;
           }
           else if (BIT6(*pUTF8) == 0)
           {
               if (nTB != 0)
               {
                   nTB--;
                   if (cchDest)
                   {
                       lpDestStr[cchWC] <<= 6;
                       lpDestStr[cchWC] |= LOWER_6_BIT(*pUTF8);
                   }
                   if (nTB == 0)
                       cchWC++;
               }
           }
           else
           {
               if (nTB > 0)
               {
                   nTB = 0;
                   cchWC++;
               }
               else
               {
                   UTF8 = *pUTF8;
                   while (BIT7(UTF8) != 0)
                   {
                       UTF8 <<= 1;
                       nTB++;
                   }
                   if (cchDest)
                       lpDestStr[cchWC] = UTF8 >> nTB;
                   nTB--;
               }
           }
           pUTF8++;
       }
       return cchWC;
    }
    

    eingaben sind:
    - pointer auf den source string (UTF-8)
    - länge des source strings
    - pointer auf den ausgabespeicher (wchar_t)
    - grösse des ausgabespeichers

    btw: der code stammt übrigens von 'microsoft' :p



  • jo, danke.
    das hilft mir sehr, um noch etwas mehr zu verstehen.

    vielleicht nutze ich aber jetzt trotzdem eine andere Bibliothek.
    und zwar diese: http://www.icu-project.org/userguide/strings.html#cpp_strings_c


Anmelden zum Antworten