Punycode Converter
Convert international domain names to xn-- and back, checked the way registries and browsers check them, with look-alike warnings.
Valid IDN. Valid under every standard: this is the name a registry can register and browsers open.
Runs in your browser on Unicode 18.0.0 data. Nothing you type is sent or stored.
münchen.de
Valid under every standard: this is the name a registry can register and browsers open.
- Unicode
- münchen.de
- xn-- (Punycode)
- xn--mnchen-3ya.de
- The .de registry accepts names in Latin (its rules); each character must also be in its IDN table.
münchenxn--mnchen-3ya
xn--mnchen-3ya: 14 of 63 octets
- U+006DLatinvalid
- U+00FCLatinvalid
- U+006ELatinvalid
- U+0063Latinvalid
- U+0068Latinvalid
- U+0065Latinvalid
- U+006ELatinvalid
de
de: 2 of 63 octets
- U+0064Latinvalid
- U+0065Latinvalid
Whole name: 17 of 253 characters
How does Punycode work?
Punycode writes any Unicode label with only a–z, 0–9 and the hyphen: the ASCII letters are copied first, then a hyphen, then each other character as a number in base 36 that says what it is and where it goes.
The algorithm is Bootstring with the parameters RFC 3492 fixed for domain names: base 36, tmin 1, tmax 26, skew 38, damp 700, an initial bias of 72 and an initial code point of 128. Each non-ASCII character becomes a delta, its distance from the last one in code points and positions, written as a variable-length number whose digit thresholds adapt as it goes.
Decoding reads it back the same way. Case doesn't matter to a decoder, but an encoder writes lowercase, because IDNA2008 wants A-labels in lowercase.
münchen → mnchen-3ya, step by step
- ASCII letters copiedmnchen
- the hyphen-
- ü = U+00FC, inserted at position 1(252 − 128) × 7 + 1 = 869
- as base-36 digits329 · t 1y24 · t 1a0 · t 26
- Resultxn--mnchen-3ya
What does xn-- mean? A-labels and U-labels
xn-- is the prefix that marks a label as Punycode: an ASCII-Compatible Encoding. The xn-- form is the A-label the DNS stores; the Unicode form people read is the U-label.
The DNS limits are counted on the A-label: 63 octets a label, so the Punycode after xn-- can be at most 59 characters, and 253 characters for the whole name as text. A U-label can be much longer than 63 characters, up to 252 code points, because Punycode compresses.
An A-label is only real if it decodes to a valid U-label and that U-label encodes back to the same A-label. An xn-- label that fails that round trip is a fake A-label, and IDNA treats it as invalid.
One label, two forms
Why do Punycode converters give different answers?
Because there's more than one standard. IDNA2008 says what a registry may register, with no mapping at all. UTS #46 says how software maps what people type first. Browsers run UTS #46 with their own settings, and older software used a transitional mode that's now deprecated.
The transitional mode differs only in four characters: ß, ς and the two zero-width joiners. So faß.de becomes xn--fa-hia.de under the current rules but fass.de under the old ones: two different domains.
IDNA2008 disallows symbols outright, while UTS #46 marks many of them valid but outside IDNA2008. That's why ☕.example converts in every browser, and no IDNA2008 registry will accept it.
Since June 2026 the URL Standard also opens an all-ASCII host whose xn-- label isn't valid, rather than rejecting it. xn--8i7caa decodes to full-width letters that aren't allowed, yet browsers open it: a name can be invalid and still work.
The same names under each standard
| Name | IDNA2008 | UTS #46 | Browsers | Transitional |
|---|---|---|---|---|
| faß.de | xn--fa-hia.de | xn--fa-hia.de | xn--fa-hia.de | fass.de |
| βόλος.com | xn--nxasmm1c.com | xn--nxasmm1c.com | xn--nxasmm1c.com | xn--nxasmq6b.com |
| ⅰⅹ.com | refusedDISALLOWED | ix.com | ix.com | same |
| I♥NY.ws | refusedDISALLOWED | xn--iny-zx5a.ws | xn--iny-zx5a.ws | same |
| ☕.example | refusedDISALLOWED | xn--53h.example | xn--53h.example | same |
| xn--8i7caa.famitei.net | refusedDISALLOWED | refusedV7 | xn--8i7caa.famitei.net | same |

Both formsThe name as people read it and the xn-- form the DNS uses, each ready to copy.Every standard at onceIDNA2008, UTS #46, the URL Standard and this browser: where they disagree, the rule is named.Each characterCode point, script and status under each standard: the odd one out is easy to spot.How browsers show itChrome, Firefox and Safari decide differently whether to show Unicode or xn--.How do I spot a look-alike (homograph) domain?
Look at the scripts, not the letters. A name written entirely in Cyrillic can read exactly like a Latin one; Unicode's confusables data maps each character to the letter it looks like, so the whole name has a skeleton you can compare.
Browsers don't agree on what to do about it. Chrome shows the all-Cyrillic аррӏе.com as xn--, because .com isn't a Cyrillic TLD; Firefox shows it in Unicode on purpose and leaves the problem to registries; Safari shows any Cyrillic outside its Cyrillic TLDs as xn--.
Mixing scripts inside one label is a stronger signal. Chrome never mixes Latin, Cyrillic and Greek, and lets ASCII letters mix only with Chinese, Japanese or Korean. This converter shows each character's script and the name it reads as, but it can't tell you whether a site is safe.
аррӏе.com, letter by letter
- аU+0430Cyrillic→ a
- рU+0440Cyrillic→ p
- рU+0440Cyrillic→ p
- ӏU+04CFCyrillic→ l
- еU+0435Cyrillic→ e
Reads as apple.com
Shown as
Chromexn--80ak6aa92e.com
Firefoxаррӏе.com
Safarixn--80ak6aa92e.com
Can a domain name contain emoji?
Browsers will open one, and IDNA2008 registries won't register one. Emoji are disallowed in IDNA2008, valid in UTS #46, and the URL Standard turns ☕.example into xn--53h.example.
The emoji style selector (U+FE0F) is removed before encoding, so ❤️ and ❤ give the same name. Emoji joined with a zero-width joiner, such as family emoji, fail wherever the joiner rules are checked.
Emoji in a domain name
| Name | IDNA2008 | Browsers (UTS #46) |
|---|---|---|
| ☕.example | refusedDISALLOWED | xn--53h.example |
| ❤️.example | refusedDISALLOWED | xn--qei.example |
| 👨👩👧.example | refusedDISALLOWED | refusedC2 |
What is xn--6ii? Blank-looking names
xn--6ii decodes to U+2800, BRAILLE PATTERN BLANK: a real character that looks like an empty space. That's why it turns up in names and usernames that seem to have nothing in them.
A converter shows what's really there. Paste the name above and each character appears with its code point; for blank and invisible characters, the Invisible Character tool says what each one is and where it's used.
Blank-looking characters in a domain
| Character | Unicode name | UTS #46 | Browsers |
|---|---|---|---|
| U+2800 | BRAILLE PATTERN BLANK | valid, not in IDNA2008 | xn--6ii.example |
| U+3164 | HANGUL FILLER | removed | .example |
| U+FFA0 | HALFWIDTH HANGUL FILLER | removed | .example |
| U+115F | HANGUL CHOSEONG FILLER | removed | .example |
| U+200B | ZERO WIDTH SPACE | removed | .example |
Can I register an internationalized domain?
Only in the scripts the registry allows. Each registry lodges its own IDN tables with IANA, listing the characters it accepts, and ICANN's IDN Guidelines 4.1 have been mandatory for registry operators since 30 April 2025.
So a valid IDN isn't automatically registrable everywhere: a name in one script can be accepted by one registry and refused by another. Check the registry's table, or try the name in our Domain Checker.
Scripts each registry accepts
- .com.comVerisignArabicArmenianAvestanLatin+79 more
- .org.orgPublic Interest RegistryCyrillicLatinHanDevanagari+2 more
.deDENICLatin
.euEURidLatin
.plNASKLatinCyrillicGreekHebrew
.esRed.esLatin
.chSWITCHLatin
.рфCoordination Center for TLD RUCyrillic
.ruCoordination Center for TLD RUNo internationalized names
- .io
.ioInternet Computer BureauNo internationalized names
Punycode converter: questions and answers
What is Punycode?
What does xn-- mean in a domain?
How do I decode an xn-- domain?
Why does my browser show xn-- instead of the name?
Is ß converted to ss?
Can a domain contain emoji?
How long can an internationalized domain name be?
How do I spot a look-alike domain?
Missing something?Suggest a feature or a new tool
Related tools
Invisible Character
Copy and paste an invisible character or blank space, and find or remove hidden characters in text
Domain Checker
Check domain availability and the true 3-year price
WHOIS Lookup
Look up domain registration, registrar, and owner details via RDAP
DNS Lookup
Every DNS record from the domain's own nameservers, beside Google's and Cloudflare's cache








