Low single quoteLowercase e with acute accent
ASCII 130 is ‚ on Windows and é in old DOS.
‚ (Single Low Quote) is byte 130 in Windows-1252, Unicode U+201A. German opens a quote inside a quote with it, and Czech does the same: ‚so‘. The closing mark is ‘ (byte 145), the character English uses to open a quote, not ’. The real trap is that ‚ looks almost exactly like a comma. It isn't one (the comma is plain ASCII 0x2C), so a CSV parser won't split on it and a find-and-replace for commas skips it. If you see ‚ on a page, that's its UTF-8 bytes E2 80 9A read as Windows-1252. The HTML entity is ‚, and its double partner „ is byte 132.
é (Small E with Acute) is byte 130 in code page 437, the original IBM PC character set, and maps to Unicode U+00E9. Windows-1252 has the low quote ‚ at 130, so French DOS text read as Windows-1252 turns café into caf‚, which passes for a typo with a stray comma. Code page 850 kept é at 130 too. Its capital É is 144 in DOS.
#include <stdio.h>int main(void) {/* On Windows (code page 1252) byte 130 is ‚.Modern terminals expect UTF-8, so print the code point, not the byte. */printf("\u201A\n"); /* UTF-8: E2 80 9A */unsigned char b = 130; /* the raw Windows-1252 byte */printf("%d 0x%02X\n", b, b); /* 130 0x82 */return 0;}
#include <stdio.h>int main(void) {/* Byte 130 is é only on a console using code page 437(chcp 437 on Windows, or DOSBox). On a UTF-8 terminal thelone byte 0x82 is invalid and prints as garbage, often �. */putchar(130);/* char is signed on x86, so a plain char holding 0x82 is -126.Use unsigned char when you compare or index by byte value. */char c = (char)130;unsigned char u = 130;printf("\n%d %d\n", c, u); /* -126 130 *//* Portable: print the Unicode character as UTF-8 instead. */printf("\u00E9\n"); /* C3 A9 */return 0;}
é is also ASCII 233 on Windows, which has the full guide.
It's not a comma but ‚, the German low quote, which is what 130 means in the Windows-1252 table the zero selects. Leave the zero off and Alt+130 reads the DOS table, which gives é. Since ‚ passes for a comma at a glance, search anything you typed with the long code for stray ‚ characters.
It was written under DOS, where é is byte 130, and you're reading it as Windows-1252, where 130 is the low quote ‚. The result looks like a typo with a stray comma, so it's easy to miss until a search for café finds nothing. Convert it in one line of Python: `Path('new.txt').write_text(Path('old.txt').read_text('cp850'), 'utf-8')`.
It's not a comma but ‚, the German low quote, which is what 130 means in the Windows-1252 table the zero selects. Leave the zero off and Alt+130 reads the DOS table, which gives é. Since ‚ passes for a comma at a glance, search anything you typed with the long code for stray ‚ characters.
It was written under DOS, where é is byte 130, and you're reading it as Windows-1252, where 130 is the low quote ‚. The result looks like a typo with a stray comma, so it's easy to miss until a search for café finds nothing. Convert it in one line of Python: `Path('new.txt').write_text(Path('old.txt').read_text('cp850'), 'utf-8')`.