perlとpython用encodeURIComponent()

App Engineと適当な鯖とjavascriptでクッキーをやりとりするのでencodeURIComponent()で動作を揃えることにした
javascript

encodeURIComponent()


perl

sub encodeURIComponent {
    my $str = encode('utf-8', shift);
    $str =~ s/([^0-9A-Za-z!'()*\-._~])/sprintf("%%%02X", ord($1))/eg;
    return $str;
}


python

def encodeURIComponent(str):
  def replace(match):
    return "%" + hex( ord( match.group() ) )[2:].upper()
  return re.sub(r"([^0-9A-Za-z!'()*\-._~])", replace, str.encode('utf-8') )  

参考
http://groundwalker.com/blog/2007/02/javascript_escape_encodeuri_encodeuricomponent_.html
javascript: escape(), encodeURI(), encodeURIComponent() 比較