Punycode to Unicode Converter - Decode & Encode IDN Domain Names
Convert Punycode to Unicode and Unicode to Punycode online. Decode xn-- encoded internationalized domain names (IDN) instantly with RFC 3492 compliance.
About
Internationalized Domain Names (IDN) encode non-ASCII characters into a compatible ASCII form called Punycode, governed by RFC 3492. A domain like münchen.de becomes xn--mnchen-3ya.de through the Bootstring algorithm. Misreading or mistyping a Punycode label leads to DNS resolution failure or, worse, exposes users to homograph phishing attacks where visually identical Unicode characters redirect to malicious hosts. This tool implements the full RFC 3492 encode/decode pipeline locally in your browser. No data leaves your machine. It processes each domain label independently, preserving ASCII-only labels and converting only those that require it. The tool approximates standard IDNA2008 behavior but does not enforce full IDNA lookup-context rules such as Bidi or ContextJ validation.
Formulas
The Punycode Bootstring algorithm (RFC 3492) separates a Unicode label into its Basic (ASCII) and Non-Basic code points. Basic code points are copied directly, followed by a delimiter -. Non-basic code points are encoded as variable-length integers representing insertion positions via delta encoding.
The bias adaptation function controls digit thresholds:
adapt(delta, numpoints, firsttime) → biasInitial parameters per RFC 3492:
n = 128 (initial code point), delta = 0, bias = 72, base = 36, tmin = 1, tmax = 26, skew = 38, damp = 700The threshold t at digit position k is clamped:
t = clamp(k − bias, tmin, tmax)Delta adaptation step:
delta = deltadamp (first time) or delta2 (subsequently), then delta += deltanumpoints, iterated while delta > (base − tmin) × tmax2Where n is the current code point threshold, delta is the accumulated insertion offset, bias controls variable-length integer thresholds, base is the digit radix (36), tmin/tmax clamp the threshold range, skew and damp tune the adaptation curve, and numpoints is the count of code points processed so far.
Reference Data
| Unicode Domain | Punycode Equivalent | Script | Country/Use |
|---|---|---|---|
| münchen.de | xn--mnchen-3ya.de | Latin (ü) | Germany |
| bücher.com | xn--bcher-kva.com | Latin (ü) | Germany |
| café.fr | xn--caf-dma.fr | Latin (é) | France |
| ñandú.com | xn--and-6ma2c.com | Latin (ñ, ú) | Spanish |
| 例え.jp | xn--r8jz45g.jp | CJK (Kanji + Hiragana) | Japan |
| 中文.com | xn--fiq228c.com | CJK (Chinese) | China |
| рф.com | xn--p1acf.com | Cyrillic | Russia |
| مثال.com | xn--mgbh0fb.com | Arabic | Arabic-speaking |
| παράδειγμα.gr | xn--hxajbheg2az3al.gr | Greek | Greece |
| 도메인.한국 | xn--hq1bm8jm9l.xn--3e0b707e | Hangul | South Korea |
| คน.com | xn--m3c.com | Thai | Thailand |
| उदाहरण.भारत | xn--p1b6ci4b4b3a.xn--h2brj9c | Devanagari | India |
| québec.ca | xn--qubec-9ua.ca | Latin (é) | Canada |
| gößen.de | xn--gen-esa4e.de | Latin (ö, ß) | Germany |
| straße.at | xn--strae-oqa.at | Latin (ß) | Austria |
| ελ.gr | xn--qxam.gr | Greek | Greece |
| mañana.com | xn--maana-pta.com | Latin (ñ) | Spanish |
| 名がドメイン.com | xn--v8jxj3d1dzdz08w.com | CJK + Hiragana + Katakana | Japan |
| ação.br | xn--ao-0jab.br | Latin (ã, ç) | Brazil |
| dömäin.se | xn--dmin-moa0i.se | Latin (ö, ä) | Sweden |