Skip to content
ZeroServer.tools

Unicode Character Search

Search all 154,998 characters of Unicode 16.0 by name, everyday word or code point, or paste one in, then copy it or any of its escapes.

Try
Copy button gives

302 common characters in 15 groups. Search covers all 154,998 characters of Unicode 16.0, and its 65 control codes.

Spaces and invisible characters

  • U+00A0
  • U+2002
  • U+2003
  • U+2009
  • U+200A
  • U+202F
  • U+3000
  • U+200B
  • U+200C
  • U+200D
  • U+2060
  • U+00AD
  • U+FEFF
  • U+200E
  • U+200F
  • U+2800
  • U+3164

Punctuation and quotation marks

  • U+2014
  • U+2013
  • U+2011
  • U+2026
  • U+2018
  • U+2019
  • U+201C
  • U+201D
  • U+201A
  • U+201E
  • U+00AB
  • U+00BB
  • U+2039
  • U+203A
  • U+2022
  • U+2023
  • U+00B7
  • U+00A7
  • U+00B6
  • U+2020
  • U+2021
  • U+2032
  • U+2033
  • U+00A1
  • U+00BF
  • U+203D

Arrows

  • U+2190
  • U+2191
  • U+2192
  • U+2193
  • U+2194
  • U+2195
  • U+2196
  • U+2197
  • U+2198
  • U+2199
  • U+21D0
  • U+21D1
  • U+21D2
  • U+21D3
  • U+21D4
  • U+21A9
  • U+21AA
  • U+21BA
  • U+21BB
  • U+21C4
  • U+27A1
  • U+2B05
  • U+2B06
  • U+2B07

Check marks and crosses

  • U+2713
  • U+2714
  • U+2705
  • U+2611
  • U+2612
  • U+2717
  • U+2718
  • U+274C
  • U+274E
  • U+2716

Stars, hearts and shapes

  • U+2605
  • U+2606
  • U+2B50
  • U+2726
  • U+2727
  • U+272A
  • U+2764
  • U+2763
  • U+25A0
  • U+25A1
  • U+25B2
  • U+25B3
  • U+25B6
  • U+25C0
  • U+25BC
  • U+25BD
  • U+25C6
  • U+25C7
  • U+25CB
  • U+25CF
  • U+25C9
  • U+2B1B
  • U+2B1C

Currency

  • U+0024
  • U+00A2
  • U+00A3
  • U+00A4
  • U+00A5
  • U+20AC
  • U+20B9
  • U+20BD
  • U+20A9
  • U+20BF
  • U+20A3
  • U+20A4
  • U+20A6
  • U+20AA
  • U+20AB
  • U+20B1
  • U+20B4
  • U+20BA
  • U+0E3F

Mathematics

  • U+00B1
  • U+00D7
  • U+00F7
  • U+2212
  • U+2260
  • U+2248
  • U+2261
  • U+2264
  • U+2265
  • U+221E
  • U+221A
  • U+221B
  • U+2211
  • U+220F
  • U+222B
  • U+2202
  • U+2206
  • U+2207
  • U+2208
  • U+2209
  • U+2229
  • U+222A
  • U+2282
  • U+2283
  • U+2200
  • U+2203
  • U+2205
  • U+2227
  • U+2228
  • U+00AC
  • U+2234
  • U+2220
  • U+22A5

Fractions, superscripts and subscripts

  • U+00BD
  • U+2153
  • U+2154
  • U+00BC
  • U+00BE
  • U+2155
  • U+215B
  • U+215C
  • U+215D
  • U+215E
  • U+2070
  • U+00B9
  • U+00B2
  • U+00B3
  • U+2074
  • U+2075
  • U+2076
  • U+207F
  • U+2080
  • U+2081
  • U+2082
  • U+2083

Symbols

  • U+00A9
  • U+00AE
  • U+2122
  • U+2117
  • U+2120
  • U+00B0
  • U+2103
  • U+2109
  • U+2116
  • U+2105
  • U+2030
  • U+00B5
  • U+2126
  • U+212B

Keyboard keys

  • U+2318
  • U+2325
  • U+2303
  • U+21E7
  • U+21EA
  • U+238B
  • U+232B
  • U+2326
  • U+23CE
  • U+21B5
  • U+21E5
  • U+2423

Greek letters

  • U+03B1
  • U+03B2
  • U+03B3
  • U+03B4
  • U+03B5
  • U+03B6
  • U+03B7
  • U+03B8
  • U+03B9
  • U+03BA
  • U+03BB
  • U+03BC
  • U+03BD
  • U+03BE
  • U+03BF
  • U+03C0
  • U+03C1
  • U+03C3
  • U+03C2
  • U+03C4
  • U+03C5
  • U+03C6
  • U+03C7
  • U+03C8
  • U+03C9
  • U+0393
  • U+0394
  • U+0398
  • U+039B
  • U+039E
  • U+03A0
  • U+03A3
  • U+03A6
  • U+03A8
  • U+03A9

Card suits

  • U+2660
  • U+2661
  • U+2662
  • U+2663
  • U+2664
  • U+2665
  • U+2666
  • U+2667

Music

  • U+2669
  • U+266A
  • U+266B
  • U+266C
  • U+266D
  • U+266E
  • U+266F
  • U+1D11E
  • U+1D122

Box drawing and blocks

  • U+2500
  • U+2502
  • U+250C
  • U+2510
  • U+2514
  • U+2518
  • U+251C
  • U+2524
  • U+252C
  • U+2534
  • U+253C
  • U+2550
  • U+2551
  • U+2554
  • U+2557
  • U+255A
  • U+255D
  • U+2560
  • U+2563
  • U+2566
  • U+2569
  • U+256C
  • U+2580
  • U+2584
  • U+2588
  • U+258C
  • U+2590
  • U+2591
  • U+2592
  • U+2593

Emoji

  • U+1F600
  • U+1F602
  • U+1F923
  • U+1F60A
  • U+1F60D
  • U+1F914
  • U+1F62D
  • U+1F44D
  • U+1F44F
  • U+1F64F
  • U+1F4AA
  • U+1F389
  • U+1F525
  • U+1F4AF
  • U+2728
  • U+1F680
  • U+1F3AF
  • U+1F440
  • U+1F4A1
  • U+26A0

Unicode characters: names, code points and escapes

This search covers every character in Unicode 16.0: all 154,998 that have a name, and the 65 control codes, which have only aliases. Type words from a character’s name, such as “e acute” or “black heart”; an everyday name, such as “tick”, “nbsp” or “right arrow”; a code point in any of the usual notations, such as U+00E9, 0xE9, \u00E9 or é; or paste the character itself. Pasted text is listed one code point at a time, which shows what an emoji or a flag is made of.

More than 120,000 characters are named by rule from their code point rather than one by one: the Han ideographs (CJK), the Hangul syllables, the Tangut, Khitan and Nüshu characters, and the Egyptian hieroglyphs added in Unicode 16.0. Their names read like CJK UNIFIED IDEOGRAPH-4E00 or HANGUL SYLLABLE HAN. Search finds them by that whole name, by code point or pasted in, but not by one word of the name, which they share by the tens of thousands.

Pick a character to see every way to write it: the HTML references, the CSS escape, the escapes of JavaScript, of JSON and Java, of Python, C# and Go, and of Rust, Swift, Ruby and PHP, Python’s \N{…} by name, and the URL encoding and UTF-8 bytes. Where a form does not work, the page says so: – is not U+0096 but an en dash, because HTML reads 128 to 159 as Windows-1252, and in Java \u000A becomes a real line break before the code is compiled. For a character’s block, script and other properties, use Unicode Character Info; for its HTML names, the HTML Entities Reference.

Built and maintained by Meet Shah · Last updated

What this tool is used for

  • Finding a character you can describe but not name, such as “o slash” for ø or “e with acute accent” for é, and copying it in one click.
  • Seeing what a pasted string really contains, such as a no-break space or a byte order mark that makes two strings that look the same compare as different.
  • Getting the escape for one character in the language at hand, from \u{2192} in Rust to \N{EM DASH} in Python.
  • Turning a code point from a log, a spec or a bug report, such as U+2028 or 0x1F4A9, into the character and its name.
  • Recognising a character in a hex dump by its UTF-8 bytes: ’ is E2 80 99, and a byte order mark is EF BB BF.

How it works in practice

A worked example

A CSV export from Excel will not import: the code asks each row for its “id” column and gets nothing, although the header plainly reads id, so the developer pastes that header cell into the search.

Input
id
Output
3 code points in the text
U+FEFF  ZERO WIDTH NO-BREAK SPACE
U+0069  LATIN SMALL LETTER I
U+0064  LATIN SMALL LETTER D

ZERO WIDTH NO-BREAK SPACE
U+FEFF · Format (Cf)
UTF-8 bytes: EF BB BF
JavaScript: \uFEFF
Python by name: \N{ZERO WIDTH NO-BREAK SPACE}
Also known as: BYTE ORDER MARK (Alternate), BOM (Abbreviation), ZWNBSP (Abbreviation)

The cell is three code points, not two: a byte order mark sits in front of the i. Excel writes one at the start of a file saved as CSV UTF-8, so that it can tell the encoding when it opens the file again, and a parser that does not expect it keeps it as part of the first header. The column is then named \uFEFFid, which no lookup of id will match. Drop the mark when the file is read rather than wherever a value is used: Python's utf-8-sig codec removes a leading one and leaves the rest of the text alone, and in JavaScript a check for U+FEFF at index 0 does the same.

The edge case that catches people

Trimming happens to fix this one in JavaScript, because the language counts U+FEFF as white space, so trim() and \s both remove it. That luck does not extend to its neighbours: U+200B ZERO WIDTH SPACE and U+2060 WORD JOINER are not white space to JavaScript or to Unicode, so they survive both, and Python's strip() keeps the BOM as well. When a value that looks right fails a comparison, paste it here before reaching for trim.

When not to use this tool

Do not use it to clean a whole file or to audit a data set. It shows one string at a time and lists each code point once, so it tells you what is in the text but not where or how often. To find and remove invisible characters in bulk, the Zero-Width Character Detector works on whole texts, and the Unicode Escape Converter turns a whole string into escapes at once.

Frequently Asked Questions

How do I find a character when I do not know its name?
Describe it as you would to a person: “tick”, “o slash”, “accented e”, “smart quotes” and “nbsp” all work, as do stand-ins such as ->, (c) and <3. If you can copy the character from anywhere, paste it instead, and the search lists exactly which code points it is made of.
Why are the names in capitals, and why do some look wrong?
A Unicode name is a fixed identifier rather than a description, and it never changes once published, even when it is wrong. U+FE18 is still named PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET; the correct spelling was added as an alias, listed under “Also known as”.
Why does a character show as an empty box?
A dashed box is drawn by this page on purpose: it shows how wide a space is, or that an invisible character such as U+200B is there. A plain box, or one with hex digits inside, comes from your font, which has no glyph for that character. The text is intact and shows wherever a font covers it.
Why is one emoji several code points?
Many emoji are sequences. 👍🏽 is U+1F44D followed by a skin tone modifier, a country flag is two regional indicator letters, and a family is several people joined by U+200D, the zero width joiner. Paste one into the search to see its parts.
How do I type a character once I have found it?
The copy buttons are quickest. To type one later: in Word, type its hex digits and press Alt+X; on Linux, press Ctrl+Shift+U, type the digits, then Space; on a Mac, open the Character Viewer with Control+Command+Space and search for its name.
Why does my string's length not match the number of characters?
Because length counts storage units, not what you see. In JavaScript, Java and C#, each character past U+FFFF takes two UTF-16 units, so 😀 has a length of 2 and 👍🏽 a length of 4, while UTF-8 stores 👍🏽 in 8 bytes. A character's UTF-16 and UTF-8 rows show the units it takes.
Which escape does each language use for a character past U+FFFF?
JavaScript, Rust, Swift, Ruby and PHP take braces, as in \u{1F600}. Python, C# and Go take eight digits, \U0001F600. JSON and Java have only four digits, so 😀 is the surrogate pair \uD83D\uDE00 there. HTML's &#x1F600; and CSS's \1F600 take the code point as it is.

Common errors and gotchas

  • Following a CSS escape with a digit or a letter from a to f, which the escape takes as part of its number: content: '\2192Back' is read as U+2192BA, past the end of Unicode, and shows �ck. Write '\2192 Back': the one space ends the escape and is not shown.
  • Writing \u000A in Java source, even in a comment: Java turns it into a real line break before it compiles anything, so the comment ends and the rest of the line is read as code. In a string, write \n.
  • Writing a character past U+FFFF with four hex digits: in JavaScript, \u1F600 is U+1F60, ὠ, followed by a 0. Write \u{1F600}, or in JSON the pair \uD83D\uDE00.
  • Taking a lookalike for the character you need: Latin A, Cyrillic А (U+0410) and Greek Α (U+0391) look the same but do not compare as equal, and ; can be U+037E GREEK QUESTION MARK. Paste a suspect string to see which it is.
  • Checking for spaces with a plain space only: a no-break space copied from a web page, or the narrow no-break space U+202F that French number formatting puts between thousands, slips past split(' ') and any test for U+0020.

Related Text Tools tools

Private & free — this tool runs entirely in your browser.