Back
Asciify Logo
Asciify
Þà

ASCII 223

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 ▀.

Latin LetterBlock Element

Technical Details

Technical Details

Code Example

</>
#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;
}

Code Example

</>
#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 the
lone 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;
}

How to Type It

Windows
Hold Alt and type 0223 on the numeric keypad, with Num Lock on. The leading zero picks the Windows code page. Alt+225, without the zero, types it too. No numeric keypad? In Word, type 00DF and press Alt+X.
Mac
Press Option+S.
Linux
In GNOME, or any desktop running IBus, press Ctrl+Shift+U, type df, then Space. With a Compose key set up, press Compose, s, s.
Phone
Long-press s and pick ß.

How to Type It

Windows
Hold Alt and type 223 on the numeric keypad, with no leading zero. Windows reads it as a DOS code and inserts ▀. No numeric keypad? In Word, type 2580 and press Alt+X.
Mac
Press Control+Command+Space to open the Character Viewer, then search for "upper half block".
Linux
In GNOME, or any desktop running IBus, press Ctrl+Shift+U, type 2580, then Space.
Phone
Phone keyboards have no key for it. Tap the character at the top of this page to copy it.

Frequently Asked Questions

  • 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 ß.

Frequently Asked Questions

  • 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 ß.

@workani&@alexluthor
Privacy & legal

Privacy

No accounts, no ads, no tracking cookies, and no cross-site tracking. The only analytics we keep are faceless — anonymous, aggregated counts of pages and searches, never tied to you. We store no IP addresses, set no tracking cookies, and build no profiles. Cloudflare hosts the site and handles requests for delivery and security.

Full privacy policy·Extension privacy·legal@asciify.dev

Attributions & licenses

Twemoji
© Twitter, Inc and other contributors · CC-BY 4.0
Noto Color Emoji
© Google · Apache 2.0
Fluent UI Emoji
© Microsoft · MIT
OpenMoji
© HfG Schwäbisch Gmünd · CC-BY-SA 4.0
Toss Face
© Viva Republica (Toss) · SIL OFL 1.1
JoyPixels
© JoyPixels Inc. · Free Limited Use License
SerenityOS Emoji
© The SerenityOS Developers · BSD-2-Clause
EmojiTwo
© EmojiTwo contributors · CC-BY 4.0
Apple Color Emoji
© Apple, Inc.
Facebook Emoji
© Meta Platforms, Inc.

Apple and Facebook emoji styles are proprietary and shown here solely for reference and comparison — a common-sense application of nominative-use / fair-use principles. asciify is not affiliated with, endorsed by, or sponsored by Apple, Inc., Meta Platforms, Inc., or any other rights holder listed above. If a rights holder requests removal of their emoji style from this site, it will be removed.

All other vendor emoji are reproduced for reference and comparison under their respective open licenses listed above.

Character names and code points from the Unicode® Standard. Unicode® and the Unicode Logo are registered trademarks of Unicode, Inc.

Privacy
© asciify.dev 2025-2026