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;
}
- 戻る
- 目次に戻る