Convert text to Unicode code points (U+XXXX) or turn code points back into characters. Great for emoji and symbols.
Text • U+ code points
Encoding and decoding share the page, so any result can be pasted straight back to confirm it round-trips to the text you started with — the quickest check that nothing was mangled.
Results are recalculated on every keystroke, with no submit step and no page reload, so a value can be adjusted until the answer looks right rather than guessed once.
Everything runs in your browser — no account, no uploads, nothing leaves your device.
Every character — letters, symbols and emoji — has a unique Unicode code point written like U+0041 (A) or U+1F44B (👋). This converter maps any text to its code points and converts code points back into characters.
It is essential for developers handling internationalization, emoji and special symbols, and for anyone curious about the code behind a character. Instant and private in your browser.
Unicode assigns a codepoint to every character in every writing system, written as U+ followed by hexadecimal digits. The codepoint is an abstract number; how it becomes bytes depends on the encoding. UTF-8 is variable-width, using one byte for ASCII and up to four for characters like emoji, which is why it is backward compatible with ASCII and why a "character count" and a "byte count" differ. UTF-16 uses surrogate pairs for codepoints above U+FFFF, which is the reason JavaScript reports an emoji's length as 2 — a genuine and frequent source of bugs.
Codepoint written as U+ followed by 4–6 hex digitsUTF-8: 1 byte below U+0080, 2 below U+0800, 3 below U+10000, 4 aboveUTF-16 surrogate pair for codepoints above U+FFFFHigh surrogate = 0xD800 + ((cp − 0x10000) >> 10)where:
Assumptions: A visible character may be several codepoints — a flag emoji is two regional indicators, and skin-tone variants add modifiers. Counting "characters" therefore depends on whether you mean codepoints, bytes, or grapheme clusters.
SourceThe Unicode Standard
Take one codepoint through decimal, UTF-8 bytes and UTF-16 surrogates.
ResultU+1F600 = 128,512 decimal = F0 9F 98 80 in UTF-8
This is exactly why JavaScript's "😀".length returns 2 rather than 1 — it counts UTF-16 units. Truncating a string between the surrogates produces an invalid character, which is the classic bug behind mangled emoji in text fields with length limits.
A code point is a number assigned to a character in the Unicode standard, written in the U+ notation. It is not the same as the bytes used to store it, and it is not the same as what a reader would call a character. A waving-hand emoji is a single code point, but it occupies four bytes in UTF-8 and two code units in UTF-16 — which is why the same string can truthfully be reported as having one, two or four in length depending on which layer is asking.
What people perceive as one character is a grapheme cluster, and it can be built from several code points. An emoji with a skin-tone modifier is two; a family emoji can be four or more joined by zero-width joiners; an accented letter may be a single precomposed code point or a base letter followed by a combining mark, and the two forms look identical while comparing as different strings. Normalisation exists precisely to reconcile that, and text that will be compared or searched should be normalised before it is stored.
The practical consequences show up wherever text is counted or cut. Truncating a string by code units can split a character in half and produce a replacement glyph; a length limit expressed in characters may allow far more bytes than a database column expects; and reversing a string by code point rearranges combining marks onto the wrong letters. The code points on this page are the layer where the standard defines meaning, and the layers above and below it each count differently.