Skip to content
Run here 100% in your browser, no upload, no login

Punycode Converter

Convert internationalized domains to xn-- punycode and back, with a hand-written RFC 3492 decoder.

How to use it

  1. Pick the direction: Unicode to xn-- for encoding, xn-- to Unicode for decoding.
  2. Paste one domain per line - labels that need conversion are handled individually.
  3. Encoding runs through the browser URL API; decoding uses the built-in RFC 3492 implementation.
  4. Copy the converted list or clear it and try another batch.

Common use cases

Why it stays private

Conversion happens in your browser. Domain lists, including internal or customer hostnames, never leave the device.

FAQ

Q: Why do the two directions use different engines? A: Browsers expose built-in internationalization in one direction (parsing a URL with a Unicode host), but no API encodes to punycode directly. Decoding is therefore implemented from RFC 3492 so both directions work offline.

Q: Which characters are valid in a punycode label? A: Only ASCII letters, digits and hyphens. Anything else in the input raises an error naming the offending domain, so mixed-up lists are caught instead of silently mangled.

Q: Does it lower-case or validate according to IDNA rules? A: The URL API applies the browser's normal host processing, which lower-cases and applies IDNA mapping for encoding. Full IDNA validation, such as bidi and context rules, is beyond this tool.

Your data stays on this device

Punycode Converter runs 100% locally. Everything you paste or drop is processed by your own browser and never transmitted. Nothing is stored on our servers — close the tab and it is gone.

Nothing you type is sent to a server, logged, or used for analytics. The page works even with your network disconnected after first load.