The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.


Encode::Punycode - Encode plugin for Punycode (RFC 3492)


  use Encode; use Encode::Punycode;
  $unicode  = decode('Punycode', $punycode);
  $punycode = encode('Punycode', $unicode);


Encode::Punycode is an Encode plugin, which implements the Punycode encoding.

This module provides an Encode interface for the Punycode encoding, which is defined in RFC 3492. This is not very useful because Punycode is a special-purpose encoding that is limited to fairly short strings. Please consider using Net::IDN::Punycode directly, or even Net::IDN::Encode.

Punycode is an instance of a more general algorithm called Bootstring, which allows strings composed from a small set of "basic" code points to uniquely represent any string of code points drawn from a larger set. Punycode is Bootstring with particular parameter values appropriate for IDNA. For a more generic (but less efficient) Bootstring implementation, see Encode::Bootstring.

PLEASE NOTE: This module does not do any string preparation or mappings as specified by Nameprep. It does not do add any prefix or suffix, either. For higher-level handling of full Internationalised Domain Names, see Net::IDN::Encode.


Claus Färber <>

Previous versions written by Tatsuhiko Miyagawa <>


Copyright 2007-2016 Claus Färber.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.


Encode, Net::IDN::Punycode, RFC 3492 (