Punycode Converter

Convert international domain names to xn-- and back, checked the way registries and browsers check them, with look-alike warnings.

IDNA2008 and UTS #46 (Unicode 18.0.0) · runs in your browser · nothing is sent

Valid IDN. Valid under every standard: this is the name a registry can register and browsers open.

Valid IDN

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

  1. U+006DLatinvalid
  2. U+00FCLatinvalid
  3. U+006ELatinvalid
  4. U+0063Latinvalid
  5. U+0068Latinvalid
  6. U+0065Latinvalid
  7. U+006ELatinvalid

de

de: 2 of 63 octets

  1. U+0064Latinvalid
  2. 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

  1. ASCII letters copiedmnchen
  2. the hyphen-
  3. ü = U+00FC, inserted at position 1(252 − 128) × 7 + 1 = 869
  4. as base-36 digits329 · t 1y24 · t 1a0 · t 26
  5. 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

U-label (what people read)münchen
A-label (what the DNS stores)xn--mnchen-3ya
14 of 63 octets

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

NameIDNA2008UTS #46BrowsersTransitional
faß.dexn--fa-hia.dexn--fa-hia.dexn--fa-hia.defass.de
βόλος.comxn--nxasmm1c.comxn--nxasmm1c.comxn--nxasmm1c.comxn--nxasmq6b.com
ⅰⅹ.comrefusedDISALLOWEDix.comix.comsame
I♥NY.wsrefusedDISALLOWEDxn--iny-zx5a.wsxn--iny-zx5a.wssame
☕.examplerefusedDISALLOWEDxn--53h.examplexn--53h.examplesame
xn--8i7caa.famitei.netrefusedDISALLOWEDrefusedV7xn--8i7caa.famitei.netsame
Punycode converter: a look-alike domain decoded, with the standards side by side, each character's script and how browsers show itPunycode converter: a look-alike domain decoded, with the standards side by side, each character's script and how browsers show itBoth 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--.
The textbook look-alike, made only of Cyrillic letters: valid by every standard, yet it reads as another domain. Select a number to see what each part shows.

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

  1. аU+0430Cyrillic→ a
  2. рU+0440Cyrillic→ p
  3. рU+0440Cyrillic→ p
  4. ӏU+04CFCyrillic→ l
  5. е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

NameIDNA2008Browsers (UTS #46)
☕.examplerefusedDISALLOWEDxn--53h.example
❤️.examplerefusedDISALLOWEDxn--qei.example
👨‍👩‍👧.examplerefusedDISALLOWEDrefusedC2

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

CharacterUnicode nameUTS #46Browsers
U+2800BRAILLE PATTERN BLANKvalid, not in IDNA2008xn--6ii.example
U+3164HANGUL FILLERremoved.example
U+FFA0HALFWIDTH HANGUL FILLERremoved.example
U+115FHANGUL CHOSEONG FILLERremoved.example
U+200BZERO WIDTH SPACEremoved.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
From each registry's own rules and the IDN tables lodged with IANA. A script on the list still needs every character to be in the registry's table.

Punycode converter: questions and answers

What is Punycode?

Punycode is the encoding that lets domain names use any language's letters. It rewrites a Unicode label using only a–z, 0–9 and the hyphen, so the DNS can store it, and adds the prefix xn-- to mark it. münchen.de becomes xn--mnchen-3ya.de; browsers show the Unicode form back to you.

What does xn-- mean in a domain?

It marks a label written in Punycode: an ASCII-Compatible Encoding of an internationalized name. The xn-- form (the A-label) is what's stored in the DNS; the Unicode form (the U-label) is what people read. Paste an xn-- name into the converter above to see its Unicode form.

How do I decode an xn-- domain?

Paste it into the converter above: each xn-- label is decoded to Unicode and checked. A real A-label decodes to a valid name and encodes back to exactly the same xn-- form; one that doesn't is called a fake A-label, and the converter says which rule it breaks.

Why does my browser show xn-- instead of the name?

Browsers show xn-- when a name could be mistaken for another, by their own rules: mixed scripts in one label, characters that look like Latin letters, or a script the browser doesn't show. Chrome, Firefox and Safari decide differently, and the converter shows each one's verdict.

Is ß converted to ss?

Not any more. Current processing keeps ß, so faß.de becomes xn--fa-hia.de. The old transitional processing turned it into ss, giving fass.de, a different domain. Transitional processing is deprecated, but older software can still use it; the converter shows both when they differ.

Can a domain contain emoji?

Browsers will open an emoji domain, because UTS #46 accepts many emoji: ☕.example becomes xn--53h.example. IDNA2008 disallows them, so registries that follow it won't register one. Whether a name can be registered is always the registry's call: check its rules before buying.

How long can an internationalized domain name be?

Each label can be at most 63 octets in its xn-- form, so at most 59 characters of Punycode after the prefix, and the whole name 253 characters. The Unicode form can be longer, because Punycode compresses; the converter measures both against the limits.

How do I spot a look-alike domain?

Check the scripts: a name made of Cyrillic or Greek letters that look Latin can read exactly like a familiar domain. The converter shows each character's script, Unicode's look-alike reading of the name and how browsers would show it. It finds look-alikes, but can't say whether a site is safe.

Missing something?Suggest a feature or a new tool