° is the HTML entity for the degree sign °, U+00B0 DEGREE SIGN, and ° and ° are its numeric references. In UTF-8 it’s C2 B0.
Character ° U+00B0 DEGREE SIGN
Named °
Numeric ° °
UTF-8 C2 B0
Encoding 100 °C, a 90° turn, with a no-break space before °C, gives:
100 °C, a 90° turn
Spacing
The SI Brochure, the BIPM’s reference for SI units, puts a space between a number and its unit, and degrees Celsius are no exception: 100 °C. Plane angles are: 90°, with no space. A before °C keeps the number and the unit on one line. Kelvin takes no degree sign: 300 K.
Look-alikes
° U+00B0 DEGREE SIGN °
º U+00BA MASCULINE ORDINAL INDICATOR º 1º in Spanish and Portuguese
˚ U+02DA RING ABOVE ˚ (HTML5)
℃ U+2103 DEGREE CELSIUS ℃
The ordinal indicator looks almost the same in many fonts, often with an underline, but it’s a letter: a search for 100°C won’t find 100ºC. ℃ and ℉ are compatibility characters; Unicode’s NFKC normalization turns ℃ into °C, the two characters to write in the first place.
In CSS, JSX and Markdown
.temp::after { content: "\a0\b0 C"; } /* no-break space, °, C */
The space after \b0 ends the escape and doesn’t appear in the output; without it, \b0C would be read as one hex number, U+0B0C.
JSX decodes ° in text, so <span>{temp}°C</span> works; in braces write {temp + '\u00B0C'}. CommonMark decodes ° in Markdown text and leaves it literal in code spans.
Browsers also read ° without its semicolon, one of the legacy names kept for old pages, so 20° shows 20° in HTML. This tool, CommonMark and JSX need the semicolon.