The tool you need, ready to use

Unicode Converter

é is U+00E9 (decimal 233), A is U+0041 and 😀 is U+1F600. Type a character in the text box to get its code points, or paste U+00E9, \u00E9 or é into the code box to get the character back. The card below shows the Unicode 18.0 name, block and version, plus nine notations you can copy one by one.

Last updated 2026-10-22All math stays in your browser
Examples

Visible chars
0
Code points
0
UTF-16 length
0
UTF-8 bytes
0

Code point stripCode points that form one visible character are grouped. Select one to see its card below.

Character card

    Code space mapBrowse plane → 256 cells → neighboring characters

    • Hangul
    • Latin, Greek, Cyrillic
    • Symbols and emoji
    • Other scripts
    • Han and kana
    • Surrogates and private use
    Neighboring characters

    Last updated 2026-10-22Your inputs are not stored

    ROBERIN standardThe tool you need,
    ready to use.
    • Clear at a glanceInputs and results sit where you expect them.
    • Result firstThe key number comes first; the working only when you need it.
    • Ask lessNo sign-up and no unnecessary details.

    A code point is the number Unicode gives to each character

    Unicode is a table that gives every character a number, and that number is called a code point. The letter é is U+00E9 (decimal 233), A is U+0041 (65) and 😀 is U+1F600 (128512). The value after U+ is hexadecimal, padded with zeros to at least four digits. Numbers run from U+0000 to U+10FFFF, 1,114,112 in all, and Unicode 18.0, released in 2026, assigns 172,808 characters among them.

    This tool puts a text box and a code box side by side and rewrites the other one whenever you edit either. Code can be written as U+ notation, as \u00E9 for JavaScript and JSON, \u{E9} for ES2015, \U0001F600 for Python, é and é for HTML, \E9 for CSS, or as a decimal or 0x number: nine notations, and a pasted value in any of them is recognized and decoded. The card below shows the official name, block, general category and version of the selected character, and the code space map shows where it sits among the 1,114,112 code points.

    When you need to look at code points

    Most of the time you never need a character's number. You need it when text looks broken, when you cannot type a character into code, or when what you see differs from what is stored.

    • Reading logs and API responses: text such as Caf\u00E9 in a server log or JSON response is not readable at a glance. Paste it into the code box and it turns into Café.
    • Putting symbols in web pages: a symbol that is hard to type goes into HTML as → (→) or into a CSS content value as "\2192". Every place has its own syntax, so you often have to rewrite one character in several notations.
    • Length limits and storage size: 👩‍💻 is one visible character, but it is 3 code points, a JavaScript length of 5 and 11 bytes in UTF-8. Depending on which unit a form limit or a database column counts, the same text can pass or get cut off.
    • Decomposed accents: file names on a macOS HFS Plus volume are stored fully decomposed, so a name like résumé.pdf can be made of e plus U+0301 instead of é (U+00E9). Copied elsewhere, such a name may look identical yet fail an exact comparison or a search.
    • Finding invisible characters: a zero-width space (U+200B) hiding in a copied order number or address makes comparison and search fail even though both look the same. A BOM (U+FEFF) at the start of a file can also end up glued to the first CSV header and change its name.
    • Boxes instead of characters: when a character shows as a box (□) or a question mark, you need to tell an unassigned number from a character added in a recent version that your device font does not have yet. The name and the Added in line on the card help with that.
    • Escapes in code: JSON, JavaScript and HTML each want a different escape for the same character, and a string with emoji needs surrogate pairs in some of them. Check them here before pasting them into source.

    How to use it

    1. Type or paste characters into the text box and the code box shows their code points. Going the other way, enter U+00E9, \u00E9 or é into the code box and the characters appear in the text box. Separate several values with spaces or commas.
    2. Pick one of the notation buttons: U+, decimal, 0x, \u, \u{…}, Python, HTML hex, HTML decimal or CSS. If the code box holds another notation, the button rewrites it in the one you chose, so it also works as a notation-to-notation converter.
    3. With Keep ASCII as is on, escape notations leave letters, digits and symbols alone and only convert the rest. Turn it off to write every character as a number. The AB and ab buttons set the case of the hex digits.
    4. Select a cell in the code point strip to see its name, block, category, version and ten values on the card. The copy button at the end of a line copies only that one notation.
    5. Select a plane or a cell on the code space map, or use the ‹ › buttons on the card, to browse the neighbors. Add a character you want to the text box with Add to text box.

    Nine ways to write the same character

    A code point is one number, but each place you use it has its own syntax. The table shows é (U+00E9) and 😀 (U+1F600) in each notation. Because 😀 is above U+FFFF, some notations write it as one piece and others split it in two.

    Notationé😀Where it is used
    U+ notationU+00E9U+1F600Unicode documents, character charts and prose
    Decimal233128512Numeric values in programs (JavaScript codePointAt, Python ord)
    0x hexadecimal0x00E90x1F600Numeric constants and arrays in C, Java and similar languages
    \u escape\u00E9\uD83D\uDE00JavaScript, JSON and Java strings (UTF-16 units)
    \u{…} escape\u{E9}\u{1F600}JavaScript since ES2015, Rust and Swift strings
    Python\u00E9\U0001F600Python strings (\U takes eight digits)
    HTML hexé😀HTML and XML documents
    HTML decimalé😀HTML and XML documents
    CSS\E9\1F600CSS content values and selectors
    UTF-8 bytesC3 A9F0 9F 98 80The actual bytes in files and on the network
    UTF-16 units00E9D83D DE00The unit JavaScript, Java and Windows use to hold text

    JSON and Java take exactly four digits after \u, so a character above U+FFFF is written as the surrogate pair described in the next section. Python separates the four-digit \u from the eight-digit \U. CSS takes one to six hex digits after the backslash and ends the escape with a single space if a hex digit or a space follows. An HTML character reference is closed with a semicolon. The tool understands all of these rules when it reads pasted text, so escapes and character references can be mixed in one piece of text. U+ and 0x values are read only as a list separated by spaces or commas; mixed in with escapes they stay as plain text, and the tool says so. HTML numeric references € to Ÿ follow the HTML Standard and map through the Windows-1252 table (– becomes –).

    Why 😀 is written as two escapes, \uD83D\uDE00

    UTF-16 stores text in 16-bit units. Sixteen bits reach only U+FFFF, so a larger code point is written as two values from a reserved range (U+D800 to U+DFFF) called surrogates. For 😀 (U+1F600) the calculation goes like this.

    1. Subtract 0x10000 from the code point: 0x1F600 − 0x10000 = 0xF600.
    2. Split the remaining 20 bits into the top 10 and the bottom 10. For 0xF600 the top 10 bits are 0x3D and the bottom 10 are 0x200.
    3. Add 0xD800 to the top value and 0xDC00 to the bottom one: 0xD800 + 0x3D = 0xD83D and 0xDC00 + 0x200 = 0xDE00.
    CharacterCode pointUTF-16 (surrogate pair)UTF-8 bytes
    😀U+1F600D83D DE00F0 9F 98 80
    👍U+1F44DD83D DC4DF0 9F 91 8D
    𝄞U+1D11ED834 DD1EF0 9D 84 9E
    𠀀U+20000D840 DC00F0 A0 80 80

    That is why '😀'.length is 2 in JavaScript and why JSON writes \uD83D\uDE00. A high surrogate (D800 to DBFF) must be followed by a low surrogate (DC00 to DFFF); one on its own is not a character. The tool reports a surrogate value such as U+D800, or an unpaired \uD83D, as an error.

    Four ways to count characters

    The number of characters depends on what you count. What looks like one character on screen is a grapheme cluster as defined by UAX #29. The code point count is the number of Unicode numbers, the UTF-16 length is the value JavaScript returns for length, and UTF-8 bytes are the size once the text is saved to a file. The four boxes above the text box show these values.

    TextVisible charactersCode pointsUTF-16UTF-8 bytesWhat differs
    A1111With ASCII all four values are equal
    é1112An accented Latin letter takes 2 bytes in UTF-8
    €1113The euro sign takes 3 bytes but a single UTF-16 unit
    é (e + U+0301)1223A combining accent attaches to the letter before it
    😀1124Above U+FFFF, so two UTF-16 units
    👍🏽1248A skin tone modifier (U+1F3FD) is attached
    🇺🇸1248A flag is two regional indicator letters, U and S
    👩‍💻13511A ZWJ (U+200D) joins two emoji

    So before you set a limit such as "at most 20 characters", decide what is being counted. People feel visible characters, storage cares about UTF-8 bytes, and the positions used by slice and substring in JavaScript are UTF-16 units. Cutting an emoji in the middle at a UTF-16 boundary leaves an unpaired surrogate, which shows up as a broken character (�).

    Hangul syllables: a formula for the code point

    The 11,172 precomposed Hangul syllables (U+AC00 to U+D7A3) are laid out as 19 initials × 21 vowels × 28 finals (including no final), so their numbers can be calculated. Section 3.12 of the Unicode standard gives the formula below, with every index counted from 0.

    code point = 0xAC00 + (initial × 21 + vowel) × 28 + final

    SyllableInitialVowelFinalCalculationCode point
    가ㄱ 0ㅏ 0none 0AC00 + (0 × 21 + 0) × 28 + 0U+AC00
    한ㅎ 18ㅏ 0ㄴ 4AC00 + (18 × 21 + 0) × 28 + 4 = AC00 + 10,588U+D55C
    힣ㅎ 18ㅣ 20ㅎ 27AC00 + (18 × 21 + 20) × 28 + 27 = AC00 + 11,171U+D7A3

    In the other direction, subtract 0xAC00 and divide by 588 (21 × 28): the quotient is the initial, the remainder divided by 28 gives the vowel, and what is left is the final. The card's As jamo line shows the same syllable split into the Hangul Jamo block, and the official name of a syllable comes from the same rule, so 한 is HANGUL SYLLABLE HAN.

    The code space map: 17 planes

    The 1,114,112 code points are divided into 17 planes of 65,536 (0x10000). Whatever precedes the last four digits is the plane number: the 1 in U+1F600. On the tool's map a large board is one plane split into 256 cells of 256 code points each, and a cell is colored by the group of block that fills most of it.

    PlaneRangeNameWhat it holds
    0U+0000 to U+FFFFBasic Multilingual Plane (BMP)Latin, Greek, Cyrillic, Hangul, common Han, kana and most scripts in use today, the surrogates (D800 to DFFF) and the private use area (E000 to F8FF)
    1U+10000 to U+1FFFFSupplementary Multilingual Plane (SMP)Most emoji, historic scripts, math letters, musical symbols
    2U+20000 to U+2FFFFSupplementary Ideographic Plane (SIP)CJK Unified Ideographs Extensions B to F and I, CJK Compatibility Ideographs Supplement
    3U+30000 to U+3FFFFTertiary Ideographic Plane (TIP)CJK Unified Ideographs Extensions G, H and J, Seal (Unicode 18.0)
    4 to 13U+40000 to U+DFFFFUnassignedNo characters assigned yet
    14U+E0000 to U+EFFFFSupplementary Special-purpose Plane (SSP)Tag characters, variation selectors supplement
    15 and 16U+F0000 to U+10FFFFSupplementary Private Use Area-A and BAreas that organizations or fonts define for themselves

    The two widest stretches in plane 0 are the CJK Unified Ideographs (U+4E00 to U+9FFF, 20,992 code points) and the Hangul syllables (U+AC00 to U+D7A3, 11,172 characters). Just after them, U+D800 to U+DFFF is reserved for surrogates and holds no characters, and U+E000 to U+F8FF is a private use area left nameless. Planes 1 to 16 are all written as surrogate pairs in UTF-16.

    Characters you cannot see

    Characters that look like spaces, or do not show at all, still have code points. The code point strip and the card show them as labels in dashed boxes, so you can tell at once what is hiding in pasted text.

    LabelCode pointOfficial nameWhere it turns up
    NBSPU+00A0NO-BREAK SPACE  in web pages, glued spaces in word processors
    ZWSPU+200BZERO WIDTH SPACEText copied from the web, places that mark where a line may break
    ZWJU+200DZERO WIDTH JOINERThe joint that makes two emoji one, as in 👩‍💻
    VS16U+FE0FVARIATION SELECTOR-16Asks for the color emoji look, as in ❤️
    BOMU+FEFFZERO WIDTH NO-BREAK SPACE (byte order mark)The very start of files saved by some editors
    IDSPU+3000IDEOGRAPHIC SPACEJapanese and Chinese text, spaces typed in full-width mode
    HFU+3164HANGUL FILLERLooks blank, so it is sometimes used in nicknames
    SHYU+00ADSOFT HYPHENA hyphen that shows only where a word is split at the end of a line

    A line break is a character too. Windows Notepad ends a line with two characters, CR (U+000D) and LF (U+000A), while macOS and Linux often use LF alone. A browser text box, however, turns a pasted CR LF into a single LF, so to see the line endings of a file as they are you need a tool that shows bytes, such as a UTF-8 hex converter.

    Normalization: NFC and NFD

    Unicode sometimes allows the same text to be written in two ways. The single é (U+00E9) and the pair e plus a combining acute accent (U+0065 U+0301) look identical, and Unicode treats them as the same text (canonical equivalence). Forcing the combined form is called NFC and forcing the split form NFD (UAX #15). Hangul works the same way: 한 is U+D55C in NFC and three jamo, U+1112 U+1161 U+11AB, in NFD.

    CharacterNFC (combined)NFD (split)
    éU+00E9U+0065 U+0301
    ÅU+00C5U+0041 U+030A
    ñU+00F1U+006E U+0303
    öU+00F6U+006F U+0308

    Comparison, search and file names often treat different normalization forms as different values. If the text box contains decomposed characters, the tool tells you, and the Combine to NFC and Split to NFD buttons convert everything at once. Compatibility normalization (NFKC and NFKD), which folds shapes such as half-width and full-width forms or ① and 1 together, is not done here.

    Common mistakes

    • Writing the value after U+ in decimal: the E9 in U+00E9 is hexadecimal. Writing the decimal 233 as U+233 gives a different character altogether. The tool reads a bare number as hexadecimal and, if it consists only of digits, offers a button to read it as decimal.
    • Copying surrogate values as code points: turning \uD83D\uDE00 into U+D83D U+DE00 does not give a character. The code point is the single U+1F600.
    • Digits after \u: \u in JavaScript and JSON takes exactly four digits, and \U in Python exactly eight. \u1F600 is read as U+1F60 (ὠ) followed by the digit 0.
    • Digits after a CSS escape: in CSS, "\00E91" is read as U+00E91. To write a 1 after é, end the escape with a single space: "\00E9 1".
    • Dropping the semicolon in an HTML reference: &#233 without the semicolon is read differently depending on what follows it, or treated as an error. Close it as é.
    • Judging by shape: Latin A (U+0041), Greek Α (U+0391) and Cyrillic А (U+0410) look the same but are different characters. Mixed into an address or an ID, they break search and login, so check with the code points.

    Limits

    • Names, blocks, general categories and versions come from Unicode 18.0 data. Shapes are drawn by your device's fonts, so a character that is in the data can still show as a box.
    • Visible characters are counted with the browser's grapheme rules (Intl.Segmenter). Depending on the Unicode version your browser knows, recent emoji sequences may be counted differently.
    • Python's \N{name} notation and octal escapes are not read. \x is read as a code point (U+0000 to U+00FF), not as a byte, so use a UTF-8 hex converter to decode UTF-8 bytes into text.
    • CSS reads \0, surrogates and values above U+10FFFF as U+FFFD, but this tool reports surrogates and out-of-range values as errors.
    • Compatibility normalization (NFKC and NFKD), changing case and searching by character name are not included.
    • The text box converts up to 200,000 characters, and the code point strip draws the first 400.
    • Conversion happens only in your browser. The tool downloads the character name data file once, and the characters or codes you enter are never sent to a server.

    Basis: U+ notation, planes, surrogates and the Hangul syllable rule follow the Unicode 18.0 core specification; names, blocks and versions follow the Unicode 18.0 Character Database (UCD); escape syntax follows the ECMAScript, Python, HTML and CSS specifications and RFC 8259, all checked on October 22, 2026. The values in the tables were recomputed with this tool's conversion core and compared.

    Sources

    Frequently asked questions

    What is the Unicode code point of é?

    The precomposed é is U+00E9, decimal 233. In JavaScript and JSON you write it as \u00E9, in HTML as é or é, and in UTF-8 it takes two bytes, C3 A9. A decomposed é is a different sequence: e (U+0065) plus a combining acute accent (U+0301).

    How do I turn a code like U+00E9 back into a character?

    Enter U+00E9 in the code box and the text box shows é. Values written in other notations, such as \u00E9, é, é or 0xE9, can be pasted as they are and the tool recognizes the notation. Separate several values with spaces or commas.

    Why does 😀 show up as two escapes like \uD83D\uDE00?

    😀 is a single code point, U+1F600. The \u escape in JavaScript, JSON and Java takes exactly four hex digits (one UTF-16 unit), so anything above U+FFFF is written as a surrogate pair, \uD83D\uDE00. \u{1F600} and Python's \U0001F600 write it as one.

    Why is the length of one emoji 2 or 5?

    JavaScript's length counts UTF-16 units. 😀 is one code point but two UTF-16 units, and 👩‍💻 is three code points (U+1F469, U+200D, U+1F4BB), which makes five units. This tool shows visible characters, code points, UTF-16 length and UTF-8 bytes side by side.

    Why do two identical-looking é have different code points?

    A precomposed é is one code point, U+00E9, while a decomposed é is two, e (U+0065) and a combining accent (U+0301). They look the same and Unicode treats them as equivalent, but exact string comparison can tell them apart. The Combine to NFC button makes them match.

    How do I find characters I cannot see?

    Paste the text into the text box. The code point strip labels zero-width spaces (ZWSP, U+200B), the byte order mark (BOM, U+FEFF) and no-break spaces (NBSP, U+00A0) in dashed boxes. That helps when a copied order number or address behaves strangely.

    How many code points does Unicode have?

    U+0000 to U+10FFFF is 1,114,112 code points, split into 17 planes of 65,536. Unicode 18.0 assigns 172,808 characters. The surrogate range U+D800 to U+DFFF is never used for characters.

    Is the text I enter sent to a server?

    No. Conversion happens only in your browser. The tool downloads the Unicode 18.0 data file once to show character names, but the characters or codes you enter are never sent or stored.