Exponent and Index Symbols
The thirty-two superscript and subscript characters, each with its real codepoint and official Unicode name. The notes cover the normalisation that turns a raised digit back into a plain one.
Tap any tile to copy it. Nothing is sent anywhere — the copy happens in your browser.
What the set actually covers
Two short runs of characters. The superscripts, U+2070 to U+207F, hold the ten digits, the raised ⁺ ⁻ ⁼, a bracket pair, and exactly two letters: ⁱ and ⁿ. The subscripts, U+2080 to U+208E, hold the same ten digits and the same five operators and no letters at all. That is the whole repertoire: you cannot build an arbitrary raised expression out of it.
The one thing that reliably destroys them: NFKC
Superscripts and subscripts are compatibility characters, which means Unicode records what each one is a variant of, and NFKC normalisation is licensed to replace it with that plain form. Run x² through NFKC and it comes back x2. Run H₂O and it comes back H2O. Any destination that normalises to NFKC on the way in — a search index, an identifier check, a username field — flattens the raised digit into an ordinary one, and the string it stores is not the string you pasted. NFC leaves them alone. If the raised form has to survive, the question to ask about the destination is which normalisation it applies, not which font it uses.
They are digits to one check and not to another
A raised digit still carries a numeric value in the character database. In Python, unicodedata.numeric called on ² returns 2.0, and '10²'.isdigit() is True — but int('10²') raises ValueError. So a form that screens input with a digit test can wave through a string that the parser behind it then refuses. If you are validating, test what the parser will do, not what the character claims to be.
Half of them survive a legacy encoding and half do not
¹ U+00B9, ² U+00B2 and ³ U+00B3 sit below U+0100, so latin-1 and cp1252 carry them as a single byte. ⁰ U+2070 and ⁴ U+2074 through ⁹ U+2079 do not exist in those encodings at all. Send x² and x⁵ through the same latin-1 export and only one of them comes back. Every subscript is above U+0100, so none survives that trip — an invisible split inside what looks like one uniform set of ten digits.
Width is not uniform inside the set either
¹, ², ³, ⁴ and ₁ through ₄ have East Asian width Ambiguous. ⁰, ⁵ through ⁹, ₀ and ₅ through ₉ are width Neutral. In a terminal set to render ambiguous characters wide, x⁴ and x⁵ are different widths — which is enough to misalign a column of exponents that was padded with spaces.
Character or markup
<sup>2</sup>, or a CSS vertical-align rule, raises an ordinary digit 2: the text layer still says 2, so a copy takes away “x2” and a plain search for “x2” finds it. ² is a different character: a copy carries the raised form with it into a plain-text field, and a search for “x2” misses it unless the search normalises. Neither is right everywhere. Choose by what has to happen to the text afterwards — read by a person, or parsed.
There is no superscript R for a registered mark
The registered sign is one character, U+00AE REGISTERED SIGN, category So; it is not assembled from a letter and a raised mark, and nothing in the superscript run is a raised R. It is on copyright and trademark symbols. The subscript letters that do exist, U+2090 to U+209C, are not in the set generated for this page. The wing index is the maths and science symbols list, and the operators these exponents attach to are on math symbols.