Sharp s (Eszett)Upper half block
ASCII 223 is ß on Windows and ▀ in old DOS.
ß (Sharp S) is byte 223 in Windows-1252, Unicode U+00DF. German writes it after long vowels and diphthongs, as in Straße, groß and Fuß, while Swiss German replaces it with ss everywhere. Its capital is where code breaks. Python's 'ß'.upper() returns 'SS', two characters, so uppercasing can change a string's length, and anything built on the assumption that it won't (fixed-width fields, index math) goes wrong. Case-insensitive matching has the same catch. 'Straße'.lower() == 'STRASSE'.lower() is False, while casefold() folds ß to ss and returns True, so compare with casefold(). A capital ẞ (U+1E9E) exists and German spelling rules have allowed it since 2017, but Windows-1252 doesn't have it and default uppercasing doesn't produce it. Don't substitute the Greek β (U+03B2): it looks close and won't match in search. Old DOS had ß at 225. In UTF-8 it's C3 9F, which misreads as ß. The HTML entity is ß.
▀ (Upper Half Block) is byte 223 in code page 437, the original IBM PC character set, and maps to Unicode U+2580. It fills the top half of a cell, the partner of ▄ at 220. Half blocks are how QR codes get printed in a terminal: qrencode -t UTF8 stacks two modules per character cell with ▀, ▄ and █, so each module comes out roughly square and a phone can scan it straight off the screen. The output assumes a particular foreground and background, so on the opposite terminal theme the code comes out inverted, and some scanners won't read an inverted code. Switch the theme or use an inverted output mode. In UTF-8 it's E2 96 80, and the HTML entity is ▀.
#include <stdio.h>int main(void) {/* On Windows (code page 1252) byte 223 is ß.Modern terminals expect UTF-8, so print the code point, not the byte. */printf("\u00DF\n"); /* UTF-8: C3 9F */unsigned char b = 223; /* the raw Windows-1252 byte */printf("%d 0x%02X\n", b, b); /* 223 0xDF */return 0;}
#include <stdio.h>int main(void) {/* Byte 223 is ▀ only on a console using code page 437(chcp 437 on Windows, or DOSBox). On a UTF-8 terminal thelone byte 0xDF is invalid and prints as garbage, often �. */putchar(223);/* char is signed on x86, so a plain char holding 0xDF is -33.Use unsigned char when you compare or index by byte value. */char c = (char)223;unsigned char u = 223;printf("\n%d %d\n", c, u); /* -33 223 *//* Portable: print the Unicode character as UTF-8 instead. */printf("\u2580\n"); /* E2 96 80 */return 0;}
Dass. Since the 1996 reform, ß only follows a long vowel or a diphthong, so words with a short vowel before it switched to ss: daß became dass, and Fluß became Fluss. Words with a long vowel, like Maß or süß, kept their ß. Texts printed before the reform, and some older writers, still use daß.
The i flag only pairs single characters with single characters, and ß has no one-letter uppercase to pair with, so it never matches SS. For comparisons, let the collator decide: `'straße'.localeCompare('STRASSE', 'de', { sensitivity: 'base' }) === 0` returns true. For searching inside longer text, uppercase both strings first, which turns every ß into SS.
If the rows were double-encoded through a latin1 connection, convert them back with `UPDATE t SET c = CONVERT(CAST(CONVERT(c USING latin1) AS BINARY) USING utf8mb4);`. Try it on a copy first and limit it to rows that actually contain the garble, because correctly stored rows would break. Then set the connection to utf8mb4 so new writes don't repeat the damage.
No, they're separate names that can have different owners. Older IDNA handling mapped ß to ss before the lookup, though, so some older browsers and libraries quietly open strasse.de when you type straße.de. That's a good reason for the owner of a ß domain to register the ss version as well.
Short Alt codes are DOS codes, and 223 in the DOS table is the upper half block. Add the zero, Alt+0223, to get ß from Windows-1252. Alt+225 also works, since that's where the DOS table keeps ß.
Short Alt codes are DOS codes, and 223 in the DOS table is the upper half block. Add the zero, Alt+0223, to get ß from Windows-1252. Alt+225 also works, since that's where the DOS table keeps ß.