URL Decoding in C++



  • Hallo Zusammen,

    ein kleines Problem mit einem URL-encodierten std::string bei dem ich ein wenig Unterstützung brauche.

    Also, ich habe einen encodierten std::string, z. B. mit folgendem Wert, der mir in dieser Form in der Log-Datei eines Webservers untergekommen ist:

    std::string encodedString( "Schon+%C3%BCberzeugt." );
    

    Das Encoding scheint nach UTF-16 vorgenommen worden zu sein.

    Meine Frage: Kennt jemand eine Open-Source-Library für Linux, die UTF-16 oder UTF-8 unter C++ nach Ascii decodiert?
    So a la URLDecoder::decode() in Java. Alternativ werden auch gerne Vorschläge für eine eigene URLDecoder-Klasse angenommen. 🤡

    Thanks for any idea

    H.-Gerd

    http://www.brainsandbytes.de





  • oder was aus der mottenkiste. man muss einen zeiger auf einen url-codierten c-string übergeben der dann umgewandelt wird...

    void UrlDecode (char *in)
    {
        char *out = in;
        int hexstate = 0;
        char hexchar = 0;
    
        /* Do for all characters */
        while (1)        /*lint !e716 (while(1) ... -- A construct of the form while(1) ... was found.) */
        {
            /* Get current character */
            char c = *in++;
            /* Decide what to do */
            switch (c)
            {
                /* 0: End of string -> Terminate result and leave */
                case 0:
                *out = 0;
                return;
    
                /* +: Decode spaces */
                case '+':
                *out++ = ' ';
                break;
    
                /* %: Switch to hexmode */
                case '%':
                hexstate = 1;
                break;
    
                /* All other chars go here */
                default:
                /* Are we in hexmode? */
                if (hexstate != 0)
                {
                    /* Calculate hex nybble */
                    if (c <= '9')
                        c -= 48;
                    else
                        c -= 55;
                    /* Get the most significant nybble */
                    if (hexstate == 1)
                    {
                        hexchar = (char)(c<<4);     /*lint !e701 (shift left of signed) */
                        hexstate++;
                    }
                    /* Get the least significant nybble and store hex number */
                    else if (hexstate == 2)
                    {
                        hexchar += c;
                        hexstate = 0;
                        *out++ = hexchar;
                    }
                }
                /* Copy character when not in hexmode */
                else
                    *out++ = c;
                break;
            } /* switch (c) */
        } /* while (TRUE) */
    }
    


  • Gut gebrüllt Löwe, aber hast Du Deine UrlDecode-Methode mal auf obigen String
    angewendet? Da kommt nicht "schon überzeugt" raus! Und ich glaube nicht, dass derjenige, der den String an meinen Webserver abgeschickt hat, eine chinesische Tastatur verwendet.

    Gruß

    H.-Gerd

    http://www.brainsandbytes.de



  • Balrog schrieb:

    aber hast Du Deine UrlDecode-Methode mal auf obigen String
    angewendet? Da kommt nicht "schon überzeugt" raus!

    stimmt, hat probleme mit dem 'Ü'
    stammt wohl aus 'nem land wo keine umlaute verwendet werden :p


Anmelden zum Antworten