piapia123
en

Character Encoding Lookup

Web

Everything runs locally in your browser — nothing is uploaded

Input
Drop a file here to load its contents
Output

For when you need to know a character's code point, how it is written in a URL, or what is actually inside a stretch of "empty" text. Type some characters (or a code point such as `U+4E2D`) and each one gets a block: code point (U+4E2D), decimal, UTF-8 bytes, UTF-16 units, HTML entity, URL encoding, block and category. Two details are worth calling out. Invisible characters get a visible stand-in — space is `␠`, tab is `␉`, no-break space is `␣`, zero-width characters are named — because text copied from a web page or PDF often carries a no-break or zero-width character, which is exactly what breaks layout, search and form validation. And astral characters show two UTF-16 units (a surrogate pair), which is the root of "the string length does not match the number of characters I see".

Features

  • Code point, decimal, UTF-8 bytes and UTF-16 units all at once
  • HTML entity (中) and URL encoding (%E4%B8%AD) ready to paste
  • Invisible characters get a stand-in: space, tab, no-break space, zero-width
  • Category: Han, letter, digit, punctuation, emoji, control, format
  • The block it belongs to (Basic Latin, CJK Unified Ideographs, emoji ranges…)
  • Astral characters (emoji and friends) are marked as taking two UTF-16 units
  • Look up a code point directly (U+4E2D, 0x4E2D, or decimal 20013)
  • Several characters produce one block each
  • Search emoji by name (heart finds every heart, cat finds every cat), listed by group with code points
  • ⚠️ Narrow emoji to a single group (Smileys / People & gestures / Animals & nature …); leave the keyword empty to browse the whole curated table by group, every group with its heading, nothing truncated
  • ⚠️ The group filter is for emoji mode only — character mode encodes each character, and a character has no emoji group

How to use

  1. Paste the characters in (or type a code point such as U+4E2D)
  2. Each character gets its own block with every encoding
  3. For invisible characters, look at the stand-in on the Character row
  4. Use the copy button on a row to take just that value
  5. To look up emoji, pick Search emoji; narrow the result with a group, or leave the keyword empty to browse the table group by group

FAQ

Why is "🎉".length equal to 2?
Because JavaScript string length counts UTF-16 units, and 🎉 (U+1F389) needs two of them (a surrogate pair). That explains the classic bug: `'🎉'.length === 2`, and `'🎉'.slice(0, 1)` cuts the character in half and renders a replacement box. The right way is to iterate by code point (`[...str]` or `Array.from()`). This tool lists the units one by one, so you can see it occupying two positions in UTF-16.
How do I find a character that looks like a space but is not one?
Paste the stretch in and read the Character row: `␠` is an ordinary space (U+0020), `␣` is a no-break space (U+00A0), `␉` is a tab, "zero-width space" is U+200B and "BOM / zero-width no-break space" is U+FEFF. None of them is visible on the page, yet they are a common cause of broken layout, failed searches and forms complaining about "invalid characters" — and copying text out of a web page or PDF is exactly how they get in.
Why does a character say "block not listed"?
Because the block table covers only the few dozen common ones (Basic Latin, Greek, Cyrillic, CJK, kana, Hangul, emoji and so on). For anything outside it, the tool reports "block not listed" with the code point rather than inventing a nearby name — a wrong name sends you to a search engine that finds nothing. For the full list, search for "Unicode blocks".
Can I go the other way — I have a code point and want the character?
Yes. Type `U+4E2D`, `0x4E2D` or the decimal `20013` and the tool resolves it to a character first. Note that plain digits are read as decimal (`20013` is U+4E2D); to write hex, include a letter (`4E2D`) or a prefix (`U+`, `0x`) — otherwise `20013` is read as 0x20013, which is a completely different character.
Why does the group selector do nothing in character mode?
Because groups only exist for emoji: character mode reports the encoding, block and category of each character, and a character has no emoji group, so the selector simply is not read there — the option is not broken. The two selects are separate for exactly this reason: merging mode and group into one list would have to switch the mode to emoji behind your back when you pick a group, while you thought you were only narrowing the result.

Related tools