I've found some letters but i need to find others such as "c", "m", "p", is this even possible?
3 Answers
Take a look at the wikipedia article Unicode subscripts and superscripts. It looks like these are spread out across different ranges, and not all characters are available.
Consolidated for cut-and-pasting purposes, the Unicode standard defines complete sub- and super-scripts for numbers and common mathematical symbols ( ⁰ ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹ ⁺ ⁻ ⁼ ⁽ ⁾ ₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ ₊ ₋ ₌ ₍ ₎ ), a full superscript Latin lowercase alphabet except q ( ᵃ ᵇ ᶜ ᵈ ᵉ ᶠ ᵍ ʰ ⁱ ʲ ᵏ ˡ ᵐ ⁿ ᵒ ᵖ ʳ ˢ ᵗ ᵘ ᵛ ʷ ˣ ʸ ᶻ ), a limited uppercase Latin alphabet ( ᴬ ᴮ ᴰ ᴱ ᴳ ᴴ ᴵ ᴶ ᴷ ᴸ ᴹ ᴺ ᴼ ᴾ ᴿ ᵀ ᵁ ⱽ ᵂ ), a few subscripted lowercase letters ( ₐ ₑ ₕ ᵢ ⱼ ₖ ₗ ₘ ₙ ₒ ₚ ᵣ ₛ ₜ ᵤ ᵥ ₓ ), and some Greek letters ( ᵅ ᵝ ᵞ ᵟ ᵋ ᶿ ᶥ ᶲ ᵠ ᵡ ᵦ ᵧ ᵨ ᵩ ᵪ ). Note that since these glyphs come from different ranges, they may not be of the same size and position, depending on the typeface.

- 41,386
- 23
- 126
- 155
-
31Wonder why there isn't a capital C. And a handful of others are missing as well. – TylerM Jan 12 '16 at 17:56
-
72They are missing just to annoy you. – Vennsoh Feb 25 '16 at 02:08
-
2The most annoying is the double-superscript `iˣⁱ` .. it's as if someone went through the trouble of making the glyph, but decided to push it farther up just a bit out of spite – airstrike Sep 20 '16 at 22:30
-
13@TylerM: Because Unicode doesn't intend to cover things that are typically done with markup. The ones that exist exist because they are used in certain contexts as actually different things than the characters they look like (IPA, for example, uses a lot of those). The stance of the Unicode consortium on this is that if you need arbitrary superscript or subscript, then use markup or other higher-level mechanisms. – Joey Dec 15 '16 at 07:30
-
4Kevin: The Unicode ranges have no bearing on whether the characters are the same size and position. Lots of scripts are scattered throughout the codepoint ranges and if you have a font that covers them all, I'd expect them to look consistent (if not, it's a font bug). What you're most likely to see, though, is that the font you want has only a few of them as glyphs and font substitution kicks in for the others, so they look out of place (unsurprisingly). – Joey Dec 15 '16 at 07:32
-
2@Joey We need higher-level mechanisms for subscripts, but emoji is apparently something that needs to be encoded in Unicode. Why don't they just give us the rest of the letters so that I can write maths everywhere on the internet consistently?! – m93a Feb 08 '20 at 21:40
-
1@m93a: Math is very much the definition of something requiring markup. If you have a problem with how Unicode operates, take it up with them, not with me. But I'd guarantee you that emoji see far more and wide-reaching use these days than math. Whether you'll like it or not. – Joey Feb 14 '20 at 20:38
-
1@Joey Emoji being more widespread than math isn't relevant. Right now there are [13 different alphabets](https://en.wikipedia.org/wiki/Mathematical_Alphanumeric_Symbols) just for math in Unicode. There are [over 2000](https://en.wikipedia.org/wiki/Mathematical_operators_and_symbols_in_Unicode) math symbols in total. Refusing to complete _two_ more alphabets that are mostly already present seems like little more than stubbornness. I've read the [official explanations](https://github.com/stevengj/subsuper-proposal/issues/8) and I'm still not convinced there's a good reason not to include them. – m93a Feb 16 '20 at 18:10
-
7You can add small capitals that looks like subscripts: Aᴀʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴɪᴘǫʀsᴛᴜᴠᴡxʏᴢ And there are also some other small letters that look like subscripts (except b, o and q): ₐₑₕᵢⱼₖₗₘₙₚᵣₛₜᵤᵥₓᵧ – user2987828 Mar 05 '21 at 12:30
-
@Kevin I forgot to quote lingojam.com/TinyTextGenerator in which I found out that. – user2987828 Mar 05 '21 at 12:39
You can copy the characters
from the Wikipedia page mentioned in the other answer. Then in python
characters = '⁰ ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹ ⁺ ⁻ ⁼ ⁽ ⁾ ₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ ₊ ₋ ₌ ₍ ₎ ᵃ ᵇ ᶜ ᵈ ᵉ ᶠ ᵍ ʰ ⁱ ʲ ᵏ ˡ ᵐ ⁿ ᵒ ᵖ ʳ ˢ ᵗ ᵘ ᵛ ʷ ˣ ʸ ᶻ ᴬ ᴮ ᴰ ᴱ ᴳ ᴴ ᴵ ᴶ ᴷ ᴸ ᴹ ᴺ ᴼ ᴾ ᴿ ᵀ ᵁ ⱽ ᵂ ₐ ₑ ₕ ᵢ ⱼ ₖ ₗ ₘ ₙ ₒ ₚ ᵣ ₛ ₜ ᵤ ᵥ ₓ ᵅ ᵝ ᵞ ᵟ ᵋ ᶿ ᶥ ᶲ ᵠ ᵡ ᵦ ᵧ ᵨ ᵩ ᵪ'
for c in characters.split():
print(c + '=' + hex(ord(c)))
⁰=0x2070 ¹=0xb9 ²=0xb2 ³=0xb3 ⁴=0x2074 ⁵=0x2075 ⁶=0x2076 ⁷=0x2077 ⁸=0x2078 ⁹=0x2079 ⁺=0x207a ⁻=0x207b ⁼=0x207c ⁽=0x207d ⁾=0x207e
₀=0x2080 ₁=0x2081 ₂=0x2082 ₃=0x2083 ₄=0x2084 ₅=0x2085 ₆=0x2086 ₇=0x2087 ₈=0x2088 ₉=0x2089 ₊=0x208a ₋=0x208b ₌=0x208c ₍=0x208d ₎=0x208e
ᵃ=0x1d43 ᵇ=0x1d47 ᶜ=0x1d9c ᵈ=0x1d48 ᵉ=0x1d49 ᶠ=0x1da0 ᵍ=0x1d4d ʰ=0x2b0 ⁱ=0x2071 ʲ=0x2b2 ᵏ=0x1d4f ˡ=0x2e1 ᵐ=0x1d50 ⁿ=0x207f ᵒ=0x1d52 ᵖ=0x1d56 ʳ=0x2b3 ˢ=0x2e2 ᵗ=0x1d57 ᵘ=0x1d58 ᵛ=0x1d5b ʷ=0x2b7 ˣ=0x2e3 ʸ=0x2b8 ᶻ=0x1dbb
ᴬ=0x1d2c ᴮ=0x1d2e ᴰ=0x1d30 ᴱ=0x1d31 ᴳ=0x1d33 ᴴ=0x1d34 ᴵ=0x1d35 ᴶ=0x1d36 ᴷ=0x1d37 ᴸ=0x1d38 ᴹ=0x1d39 ᴺ=0x1d3a ᴼ=0x1d3c ᴾ=0x1d3e ᴿ=0x1d3f ᵀ=0x1d40 ᵁ=0x1d41 ⱽ=0x2c7d ᵂ=0x1d42
ₐ=0x2090 ₑ=0x2091 ₕ=0x2095 ᵢ=0x1d62 ⱼ=0x2c7c ₖ=0x2096 ₗ=0x2097 ₘ=0x2098 ₙ=0x2099 ₒ=0x2092 ₚ=0x209a ᵣ=0x1d63 ₛ=0x209b ₜ=0x209c ᵤ=0x1d64 ᵥ=0x1d65 ₓ=0x2093
ᵅ=0x1d45 ᵝ=0x1d5d ᵞ=0x1d5e ᵟ=0x1d5f ᵋ=0x1d4b ᶿ=0x1dbf ᶥ=0x1da5 ᶲ=0x1db2 ᵠ=0x1d60 ᵡ=0x1d61
ᵦ=0x1d66 ᵧ=0x1d67 ᵨ=0x1d68 ᵩ=0x1d69 ᵪ=0x1d6a

- 24,525
- 11
- 66
- 89

- 1,813
- 1
- 14
- 12
-
2FYI - for JavaScript, the string escape sequence is \uXXXX (where XXXX is a four-digit hexadecimal number) – Kevin Hakanson Aug 01 '16 at 13:01
-
1JavaScript equivalent: characters.split(' ').map(c => c.charAt(0)+'=U+'+c.charCodeAt(0).toString(16)).join(' ') – ChrisV Aug 23 '16 at 10:55
import sys
# on windows run from QtConsole for unicode
# (Cmd console only support codepage characters)
# At present (6/10/2017), superscripts/subscript chars
# are best viewed with terminal/text-editor set to monospace font
# "DejaVu Sans Mono"
# "Consolas" works also, but is missing a few characters...
# and, "Courier" has the worst support at present...
if int(sys.version[0]) != 3:
print('Aborted: Python 3.x required')
sys.exit(1)
def table():
unicode_map = {
# superscript subscript
'0' : ('\u2070', '\u2080' ),
'1' : ('\u00B9', '\u2081' ),
'2' : ('\u00B2', '\u2082' ),
'3' : ('\u00B3', '\u2083' ),
'4' : ('\u2074', '\u2084' ),
'5' : ('\u2075', '\u2085' ),
'6' : ('\u2076', '\u2086' ),
'7' : ('\u2077', '\u2087' ),
'8' : ('\u2078', '\u2088' ),
'9' : ('\u2079', '\u2089' ),
'a' : ('\u1d43', '\u2090' ),
'b' : ('\u1d47', '?' ),
'c' : ('\u1d9c', '?' ),
'd' : ('\u1d48', '?' ),
'e' : ('\u1d49', '\u2091' ),
'f' : ('\u1da0', '?' ),
'g' : ('\u1d4d', '?' ),
'h' : ('\u02b0', '\u2095' ),
'i' : ('\u2071', '\u1d62' ),
'j' : ('\u02b2', '\u2c7c' ),
'k' : ('\u1d4f', '\u2096' ),
'l' : ('\u02e1', '\u2097' ),
'm' : ('\u1d50', '\u2098' ),
'n' : ('\u207f', '\u2099' ),
'o' : ('\u1d52', '\u2092' ),
'p' : ('\u1d56', '\u209a' ),
'q' : ('?', '?' ),
'r' : ('\u02b3', '\u1d63' ),
's' : ('\u02e2', '\u209b' ),
't' : ('\u1d57', '\u209c' ),
'u' : ('\u1d58', '\u1d64' ),
'v' : ('\u1d5b', '\u1d65' ),
'w' : ('\u02b7', '?' ),
'x' : ('\u02e3', '\u2093' ),
'y' : ('\u02b8', '?' ),
'z' : ('?', '?' ),
'A' : ('\u1d2c', '?' ),
'B' : ('\u1d2e', '?' ),
'C' : ('?', '?' ),
'D' : ('\u1d30', '?' ),
'E' : ('\u1d31', '?' ),
'F' : ('?', '?' ),
'G' : ('\u1d33', '?' ),
'H' : ('\u1d34', '?' ),
'I' : ('\u1d35', '?' ),
'J' : ('\u1d36', '?' ),
'K' : ('\u1d37', '?' ),
'L' : ('\u1d38', '?' ),
'M' : ('\u1d39', '?' ),
'N' : ('\u1d3a', '?' ),
'O' : ('\u1d3c', '?' ),
'P' : ('\u1d3e', '?' ),
'Q' : ('?', '?' ),
'R' : ('\u1d3f', '?' ),
'S' : ('?', '?' ),
'T' : ('\u1d40', '?' ),
'U' : ('\u1d41', '?' ),
'V' : ('\u2c7d', '?' ),
'W' : ('\u1d42', '?' ),
'X' : ('?', '?' ),
'Y' : ('?', '?' ),
'Z' : ('?', '?' ),
'+' : ('\u207A', '\u208A' ),
'-' : ('\u207B', '\u208B' ),
'=' : ('\u207C', '\u208C' ),
'(' : ('\u207D', '\u208D' ),
')' : ('\u207E', '\u208E' ),
':alpha' : ('\u1d45', '?' ),
':beta' : ('\u1d5d', '\u1d66' ),
':gamma' : ('\u1d5e', '\u1d67' ),
':delta' : ('\u1d5f', '?' ),
':epsilon' : ('\u1d4b', '?' ),
':theta' : ('\u1dbf', '?' ),
':iota' : ('\u1da5', '?' ),
':pho' : ('?', '\u1d68' ),
':phi' : ('\u1db2', '?' ),
':psi' : ('\u1d60', '\u1d69' ),
':chi' : ('\u1d61', '\u1d6a' ),
':coffee' : ('\u2615', '\u2615' )
}
keys = sorted(unicode_map.keys())
for key in keys:
spr = "X" + unicode_map[key][0]
sub = "X" + unicode_map[key][1]
if (spr == "X?"): spr = ""
if (sub == "X?"): sub = ""
print('%-15s %s %s' % (key, spr, sub))
table()

- 5,987
- 2
- 39
- 61