unescape

(2000/02/23)
URLエンコードされた文字列をデコード
インターネットにアップロードされたファイル名の
全角文字が「%81%40」とかになったり、
半角空白が「%20」になったりして変な感じになります。
単に%nnが16進数になってるだけなのですが・・・
標準入力からエンコード文字を入力すると、標準出力にデコードして出力します。
パブリックドメインにて。

FILENAME:unescape.c

#include <stdio.h>
#include <string.h>

int is16(int c)
{
    if ( ( '0' <= c && c <= '9' ) || 
         ( 'a' <= c && c <= 'f' ) || 
         ( 'A' <= c && c <= 'F' ) )   return 1;
    else                                    return 0;
}

int is10(int c)
{
    if ( ( '0' <= c && c <= '9' )  )  return 1;
    else                                    return 0;
}

int tolow(int c)
{
    if ( 'A' <= c && c <= 'Z' )   return c - 'A' + 'a';
    else                        return c;
}

int main(void)
{
    unsigned char   s[100];
    int             i,len;
    
    printf(":");
    scanf( "%s", s);
    len = strlen(s);
    for( i = 0 ; i < len; i ++ )
    {
        int c,c1,c2,ct;
        c = ct = s[i];
        if ( ct == '%' && i + 2 < len )
        {
            c1 = s[i+1];c2 = s[i+2];
            if ( is16(c1) && is16(c2) )
            {
                if ( is10(c1) ) c1 -= '0';
                else            { c1 = tolow(c1);c1 = c1 - 'a' + 10;}
                if ( is10(c2) ) c2 -= '0';
                else            { c2 = tolow(c2);c2 = c2 - 'a' + 10;}
                c = c1 * 16 + c2;
                i+=2;
            }
        }
        printf("%c",c);
    }
    printf( "\n");
    return 0;
}

戻る
目次に戻る