use strict;
use warnings;

sub ordinaire($){ #entier
my( $val ) = @_;

	return($val<128 		#ASCII
		&& $val != 0x27		#simple quote
		&& $val != 0x22		#double quote
		#etc
	)
}#ordinaire

sub traiter_octet($){ #caractère d'un octet
my( $c ) = @_;

    my $val = ord($c); # entier
    if( $val == 0x20 ){
    	return '+';
    }else{
    	if( ordinaire($val) ){ #ASCII non spécial
        	return chr($val);
    	}else{
        	return '%'.sprintf('%X', $val);
    	}
    }
}#traiter_octet

sub toURL($){ #chaîne
my( $chn ) = @_;

    utf8::encode($chn);
    $chn =~ s/(.)/traiter_octet($1)/eg;
    return $chn;
}#observer

use Encode 'decode_utf8';
$ARGV[0] = decode_utf8($ARGV[0], 1);
print toURL($ARGV[0]);
print "\n";
