Degree signLight shade
ASCII 176 is ° on Windows and ░ in old DOS.
° (Degree Sign) is byte 176 in Windows-1252, Unicode U+00B0. It's the degree in temperatures (20 °C), angles (90°) and coordinates (52° 31′ N). SI style puts a space before °C but none between an angle and its degree sign. If your page shows 20° instead of 20°, the text is UTF-8 and something decoded it as Windows-1252. UTF-8 needs two bytes for the degree sign, C2 B0. The B0 still comes out as °, so the value looks almost right, and the C2 turns into an extra  in front. The same stray  shows up before £, © and every other symbol in this range, which makes the problem quick to recognize. Fix the declared encoding (the Content-Type header or the meta charset) rather than deleting the Â. Watch for lookalikes too: the ordinal º (byte 186) and the ring accent ˚ (U+02DA) pass for ° on screen but not in search or parsing. Old DOS had the degree sign too, at 248. The HTML entity is °.
░ (Light Shade) is byte 176 in code page 437, the original IBM PC character set, and maps to Unicode U+2591. It's the lightest of the three shading blocks (▒ at 177, ▓ at 178, with the solid █ at 219), and text interfaces use it for backgrounds, scroll bar tracks and progress bars like ▓▓▓░░░. If you typed Alt+176 hoping for a degree sign, this is what you get: without the leading zero Windows picks from the DOS table, and Alt+0176 gives °. In C++, cout << char(176) works only when the console happens to use code page 437 or 850. It sends the single byte B0, and the console decides what B0 means: ░ under those code pages, but � under UTF-8, as on Linux or after chcp 65001. Put ░ itself in the source and set the console to UTF-8 (SetConsoleOutputCP(CP_UTF8) on Windows). Skip that step and its three UTF-8 bytes E2 96 91 show up in a code page 437 console as Γûæ. On a web page misread as Windows-1252 they turn into â–‘. The HTML entity is ░.
#include <stdio.h>int main(void) {/* On Windows (code page 1252) byte 176 is °.Modern terminals expect UTF-8, so print the code point, not the byte. */printf("\u00B0\n"); /* UTF-8: C2 B0 */unsigned char b = 176; /* the raw Windows-1252 byte */printf("%d 0x%02X\n", b, b); /* 176 0xB0 */return 0;}
#include <stdio.h>int main(void) {/* Byte 176 is ░ only on a console using code page 437(chcp 437 on Windows, or DOSBox). On a UTF-8 terminal thelone byte 0xB0 is invalid and prints as garbage, often �. */putchar(176);/* char is signed on x86, so a plain char holding 0xB0 is -80.Use unsigned char when you compare or index by byte value. */char c = (char)176;unsigned char u = 176;printf("\n%d %d\n", c, u); /* -80 176 *//* Portable: print the Unicode character as UTF-8 instead. */printf("\u2591\n"); /* E2 96 91 */return 0;}
Put the sign in a custom number format rather than in the cell. Press Ctrl+1, pick Custom and enter `0.0" °C"`, and 21.5 displays as 21.5 °C while staying a number that SUM and charts can use. Typing 21.5°C straight into the cell turns it into text.
Add the minutes divided by 60 and the seconds divided by 3600 to the degrees: 52 + 31/60 + 12/3600 = 52.52. South latitudes and west longitudes become negative, so 13° 24′ W is -13.4. Mapping APIs and GPX files take coordinates in this decimal form.
° followed by C. ℃ (U+2103) exists for compatibility with East Asian character sets, and Unicode prefers the two-character form. Normalization agrees: NFKC rewrites ℃ as °C, so text that mixes both can match in one system and not in another. ℉ (U+2109) works the same way for Fahrenheit.
Because since 1967 the SI unit has been the kelvin, not the degree Kelvin. Its symbol is K on its own, so you write 300 K with a space and no degree sign, and 300 °K is the pre-1967 style. Celsius keeps the sign because its official name is still the degree Celsius.
223. The HD44780 character LCD often used with Arduino has ° at 223 in its standard A00 ROM, which is why sketches print (char)223 for a temperature display. Sending 248, the DOS byte, or 176, the Windows-1252 one, shows a different glyph.
Build the string from two repeats and redraw it on one line: `print('\r' + '█' * done + '░' * (20 - done), end='', flush=True)`. The \r sends the cursor back to the start of the line, so each update overwrites the last one. Print a newline when it finishes, or your next output lands on the same line.