Right angle quotesDouble box top-right corner
ASCII 187 is » on Windows and ╗ in old DOS.
» (Right Guillemet) is byte 187 in Windows-1252, Unicode U+00BB. French closes quotes with it and German opens them, and on the web it's the arrow in links like Read more ». When that arrow comes from CSS, as in content: '»' on an ::after rule, it can break on its own. If the stylesheet is served with a Latin-1 charset, or the page that links it isn't UTF-8, the browser decodes the CSS file that way and the » shows up as ». Writing the escape '\BB' instead of the literal character sidesteps the question entirely. Old DOS had » too, at 175. In UTF-8 it's C2 BB, and the HTML entity is ».
╗ (Double Down and Left) is byte 187 in code page 437, the original IBM PC character set, and maps to Unicode U+2557. It's the top-right corner of an all-double frame, with ═ (205) coming in from the left and ║ (186) going down; ╔ at 201 starts the same edge. Old DOS box art opened as Windows-1252 has a recognizable look because of it: the top border ╔═══╗ turns into ÉÍÍÍ», and the sides become º. If you see that pattern, reopen the file as code page 437. In UTF-8 it's E2 95 97, and the HTML entity is ╗.
#include <stdio.h>int main(void) {/* On Windows (code page 1252) byte 187 is ».Modern terminals expect UTF-8, so print the code point, not the byte. */printf("\u00BB\n"); /* UTF-8: C2 BB */unsigned char b = 187; /* the raw Windows-1252 byte */printf("%d 0x%02X\n", b, b); /* 187 0xBB */return 0;}
#include <stdio.h>int main(void) {/* Byte 187 is ╗ only on a console using code page 437(chcp 437 on Windows, or DOSBox). On a UTF-8 terminal thelone byte 0xBB is invalid and prints as garbage, often �. */putchar(187);/* char is signed on x86, so a plain char holding 0xBB is -69.Use unsigned char when you compare or index by byte value. */char c = (char)187;unsigned char u = 187;printf("\n%d %d\n", c, u); /* -69 187 *//* Portable: print the Unicode character as UTF-8 instead. */printf("\u2557\n"); /* E2 95 97 */return 0;}
It works visually, but a screen reader may announce it by name between every link, which gets tedious fast. Hide it from assistive tech with `<span aria-hidden="true">»</span>` and mark up the trail as a list inside `<nav aria-label="Breadcrumb">`, so the structure carries the meaning instead. The same fix applies to Read more » links.
It depends on what's quoted. A full sentence introduced with a colon keeps its own period inside, and nothing follows the »: Il a dit : « Je viens demain. » A fragment worked into your own sentence takes the period outside: Il parle d'« une erreur ». A period never goes on both sides.
Which end » goes on depends on the language. French closes with it, « comme ça », German and Danish open with it, »so«, and Swedish can use it on both sides, »så». So a regex that extracts quotations by matching « then » works for French and misses German entirely. Match both orders, or treat either mark as a possible opener.
Because 187 without a zero is looked up in the DOS table, and there it's the double-line corner ╗, in both the US and Western European sets. Add the zero, Alt+0187, to get ». The DOS table has » as well, at 175, so Alt+175 is the short route.
Set w to the longest line, then pad every row to that width: `print('╔' + '═' * (w + 2) + '╗')`, then `print(f'║ {line:<{w}} ║')` for each line, and close with ╚ and ╝ the same way. If you already use the rich library, `Panel(text, box=box.DOUBLE)` draws the same frame and handles the padding for you.
Because 187 without a zero is looked up in the DOS table, and there it's the double-line corner ╗, in both the US and Western European sets. Add the zero, Alt+0187, to get ». The DOS table has » as well, at 175, so Alt+175 is the short route.