utf8



  • hallo

    in PHP gibt es die funktion utf8_decode
    beispiel:
    searchterm=utf8decode(searchterm=utf8_decode(searchterm);

    wie realisiere ich das in "C" ?
    Ich habe dort begriffe wie
    Mücke anstatt Mücke



  • vielleicht hilft das:

    #define LOWER_6_BIT(u)    ((u) & 0x003f)
    #define BIT7(a)           ((a) & 0x80)
    #define BIT6(a)           ((a) & 0x40)
    
    // Converts UTF-8 to unicode
    // -------------------------
    // lpSrcStr     Points to UTF8 encoded string
    // cchSrc       Length of UTF8 string
    // lpDestStr    Points to output buffer
    // cchDest      Number of bytes in output buffer
    int UTF8ToUnicode (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;
    }
    

    wenn du nur ascii-zeichen hast nimmst nur jedes 2te byte des erzeugten unicode strings...



  • Das ist aber nicht gerade ziemlich toll. Da sollte man noch sowas wie Locals in C++ berücksichtigen, und sichw as für Zeichen überlegen die nicht umgewandelt werden können.



  • frintrop schrieb:

    wie realisiere ich das in "C" ?
    Ich habe dort begriffe wie
    Mücke anstatt Mücke

    Wo? Bei der Aussage auf deinem Terminal? Dann stell deine Terminal-Emulation auf UTF8 um.

    Ansonsten solltest du die locales bei der Ausgabe beachten.



  • Entsetzter Zuschauer schrieb:

    Das ist aber nicht gerade ziemlich toll.

    kein wunder. ist ja auch von microsoft 😉


Anmelden zum Antworten