Skip to content

Instantly share code, notes, and snippets.

@dsample
Last active April 17, 2025 22:13
Show Gist options
  • Save dsample/79a97f38bf956f37a0f99ace9df367b9 to your computer and use it in GitHub Desktop.
Save dsample/79a97f38bf956f37a0f99ace9df367b9 to your computer and use it in GitHub Desktop.
ASCII art diagrams

ASCI art characters for creating diagrams

Characters:

Single line

  • ASCII code 191 = ┐ ( Box drawing character single line upper right corner )
  • ASCII code 192 = └ ( Box drawing character single line lower left corner )
  • ASCII code 193 = ┴ ( Box drawing character single line horizontal and up )
  • ASCII code 194 = ┬ ( Box drawing character single line horizontal down )
  • ASCII code 195 = ├ ( Box drawing character single line vertical and right )
  • ASCII code 196 = ─ ( Box drawing character single horizontal line )
  • ASCII code 197 = ┼ ( Box drawing character single line horizontal vertical )
  • ASCII code 217 = ┘ ( Box drawing character single line lower right corner )
  • ASCII code 218 = ┌ ( Box drawing character single line upper left corner )
  • ASCII code 179 = │ ( Box drawing character single vertical line )
  • ASCII code 180 = ┤ ( Box drawing character single vertical and left line )

Double line

  • ASCII code 185 = ╣ ( Box drawing character double line vertical and left )
  • ASCII code 186 = ║ ( Box drawing character double vertical line )
  • ASCII code 187 = ╗ ( Box drawing character double line upper right corner )
  • ASCII code 188 = ╝ ( Box drawing character double line lower right corner )
  • ASCII code 200 = ╚ ( Box drawing character double line lower left corner )
  • ASCII code 201 = ╔ ( Box drawing character double line upper left corner )
  • ASCII code 202 = ╩ ( Box drawing character double line horizontal and up )
  • ASCII code 203 = ╦ ( Box drawing character double line horizontal down )
  • ASCII code 204 = ╠ ( Box drawing character double line vertical and right )
  • ASCII code 205 = ═ ( Box drawing character double horizontal line )
  • ASCII code 206 = ╬ ( Box drawing character double line horizontal vertical )

Shading

  • ASCII code 176 = ░ ( Graphic character, low density dotted )
  • ASCII code 177 = ▒ ( Graphic character, medium density dotted )
  • ASCII code 178 = ▓ ( Graphic character, high density dotted )
  • ASCII code 219 = █ ( Block, graphic character )
  • ASCII code 220 = ▄ ( Bottom half block )
  • ASCII code 223 = ▀ ( Top half block )
  • ASCII code 254 = ■ ( black square )
┌───┐
│   │
└───┘

┌───┐  ┌───┐
│   ├──┤   │
└───┘  └───┘

┌───┐
│   │
└─┬─┘
  │
┌─┴─┐
│   │
└───┘

@kareiku
Copy link

kareiku commented Jul 13, 2024

@dsample

XTerm terminal

Ohh so XTerm it was. IIRC, I used that one last year when I was exploring a Linux distro, and I think it got UTF-16, so it makes sense it'd work.
For context, I started university not so long ago and I hadn't really used any Linux distro as deeply as I'm doing now, that's why I'm talking about recent things.

@Sappurit
Copy link

nice! I wonder why 2501 (━) shorter than 2500 (─) and 2550 (═)

@Schmidt-Matthew
Copy link

Schmidt-Matthew commented Apr 9, 2025

Extending ASCII to 8-Bits

ASCII was a 7-bit charset that mapped the range of values [0x00 - 0x7F] to their given character. It was later extended to 8-bit Extended ASCII and in doing so, mapped the range of values [0x00 - 0xFF]. UTF-8 added support for all remaining Unicode Code Points, which implies the mapping of the complete range of values [0x00 - 0x10_FFFF]. This made Extended ASCII obsolete. Just as Extended ASCII was mapped in such a way as to intentionally preserve the original 7-bit ASCII mapping, UTF-8 was also intentionally mapped in a similar way as to preserve the original 7-bit ASCII; though, the same preservations in UTF-8 can't be said for Extended ASCII. Instead of using the last bit for simply adding 128 more Unicode Code Points, as Extended ASCII had done. UTF-8 uses the last bit as a signal to the decoder that the character is outside the ASCII character set and to continue computing the next character's decoded value using the next byte(s) as well. As an example, it uses 0b110x_xxxx to signal a 2-byte sequence, 0b1110_xxxx to signal a 3-byte sequence, etc.

Using Extended ASCII

Most programs use UTF-8 by default. To use extended ASCII, you would have to change your LC_CTYPE environment variables to a value that respects Extended ASCII, such as:

  • Windows-1252
  • ISO-8859-1 / ISO-8859-15
  • CP-437

Bash: export LC_CTYPE=ISO-8859-1
Executing the mentioned Bash command would greatly sever any Unicode character support (limited to a subset of values [0x00 - 0xFF]) and would likely require all files/commands to have been written and stored in the same character set. Either way, it should result in the ability to print out useable 8-bit Extended ASCII characters, which was the ultimate goal we set out to accomplish.

ALT Codes

Most of the time, you can actually enter Extended ASCII characters by using the decimal value of the character with the number pad while ALT is held down. For example, entering ALT+65 would give me the ASCII character Latin Letter A, or ALT+219 would give me the Extended ASCII character full block, █.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment