Punycode ist ein im RFC 3492 standardisiertes Kodierungsverfahren zum Umwandeln von Unicode-Zeichenketten in ASCII-kompatible Zeichenketten, die aus den Zeichen a bis z, 0 bis 9 und dem Bindestrich (-) bestehen.
Der wichtigste Grund für die Einführung von Punycode war die Tatsache, dass in dem etablierten Domain Name System nur Namen zugelassen sind, die aus den 26 lateinischen Buchstaben, den Ziffern 0 bis 9, sowie einem Bindestrich-Minus („Tastatur-Bindestrich“) bestehen.
Für die englische Sprache war dies ausreichend, doch die meisten anderen Sprachen enthalten weitere Zeichen – die deutsche Sprache beispielsweise die Umlautbuchstaben ä, ö und ü sowie das ß. Um beliebige Texte aus derartigen Sprachen verarbeiten zu können, wurde 2003 das Verfahren Internationalizing Domain Names in Applications (IDNA) eingeführt, das Punycode als Kodierungsverfahren einsetzt.