Inverted question markBox top-right corner
ASCII 191 is ¿ on Windows and ┐ in old DOS.
¿ (Inverted Question Mark) is byte 191 in Windows-1252, Unicode U+00BF. Spanish opens questions with it: ¿Dónde está? It's also the middle of �, a string worth recognizing in broken text. That's the replacement character � (U+FFFD, bytes EF BF BD in UTF-8) read as Windows-1252, and it means two things went wrong. An earlier step couldn't decode a byte and swapped in �, and a later step misread the result as Windows-1252. The second mistake can be reversed, but the first can't: the original character is gone, so you have to go back to the source data. Old DOS had ¿ too, at 168. In UTF-8 it's C2 BF, and the HTML entity is ¿.
┐ (Light Down and Left) is byte 191 in code page 437, the original IBM PC character set, and maps to Unicode U+2510. It's the top-right corner of a single-line box: ─ (196) arrives from the left and │ (179) runs down, with ┌ (218) at the other end of the top edge. Unicode added variants code page 437 never had, the rounded ╮ (U+256E) and the heavy ┓ (U+2513), which some modern terminal interfaces use. Output built from those can't be converted to code page 437, so a legacy console shows question marks in the corners. In UTF-8 it's E2 94 90, and the HTML entity is ┐.
#include <stdio.h>int main(void) {/* On Windows (code page 1252) byte 191 is ¿.Modern terminals expect UTF-8, so print the code point, not the byte. */printf("\u00BF\n"); /* UTF-8: C2 BF */unsigned char b = 191; /* the raw Windows-1252 byte */printf("%d 0x%02X\n", b, b); /* 191 0xBF */return 0;}
#include <stdio.h>int main(void) {/* Byte 191 is ┐ only on a console using code page 437(chcp 437 on Windows, or DOSBox). On a UTF-8 terminal thelone byte 0xBF is invalid and prints as garbage, often �. */putchar(191);/* char is signed on x86, so a plain char holding 0xBF is -65.Use unsigned char when you compare or index by byte value. */char c = (char)191;unsigned char u = 191;printf("\n%d %d\n", c, u); /* -65 191 *//* Portable: print the Unicode character as UTF-8 instead. */printf("\u2510\n"); /* E2 94 90 */return 0;}
Where the question itself starts, which isn't always the start of the sentence: Si tienes tiempo, ¿vamos al cine? The opening clause stays outside the marks, and vamos is lowercase because the sentence began earlier. A name you're addressing works the same way, as in Marta, ¿vienes? There's no space after ¿, and no period after the closing ?.
By the RAE's rules, yes. Its Ortografía treats the opening mark as required and warns against dropping it in imitation of English. The mark does real work in longer questions, telling the reader from the first word that the sentence will rise at the end, so it's worth keeping in chats too.
UTF-8 text is being displayed as Windows-1252, so ¿ comes out as ¿ (its bytes are C2 BF) and é turns into é. The fix is the charset label, not the text. On Apache, adding `AddDefaultCharset UTF-8` to .htaccess makes the server send it, and a `<meta charset="utf-8">` line at the top of the head covers pages opened from disk.
A plain sort compares code points, and ¿ at U+00BF comes after every ASCII letter, so ¿Qué es? lands below Zapatos. Use a Spanish collator that ignores punctuation: in JavaScript, `list.sort(new Intl.Collator('es', { ignorePunctuation: true }).compare)` files it under Q, where people expect it.
Beginner C and C++ programs run into it constantly in Spanish-speaking classrooms. Printing ¿Qué? from a UTF-8 source file into a Windows console that uses code page 437 draws each UTF-8 byte on its own, so ¿ (C2 BF) shows as ┬┐ and é (C3 A9) as ├⌐. Calling SetConsoleOutputCP(CP_UTF8) at startup, or saving the source in the console's code page, lines the two up.
Use the full arc set ╭ ╮ ╰ ╯, U+256D to U+2570, one piece for each corner. They're drawn in the light line weight, so they join ─ and │ cleanly. There's no rounded version for double or heavy lines, which means ╔═╗ and ┏━┓ frames keep their square corners.