ASCII действительно изначально задумывался как 7-битный код. Это было сделано задолго до того, как 8-битные байты стали повсеместными, и даже в 1990-е годы можно было найти программное обеспечение, которое предполагало, что может использовать 8-й бит каждого байта текста для своих собственных целей («не 8-битный чистый»). В настоящее время люди думают об этом как о 8-битном коде, в котором байты с 0x80 по 0xFF не имеют определенного значения, но это реткон .
Существуют десятки кодировок текста, в которых используется 8-й бит; они могут быть классифицированы как ASCII-совместимые или нет, а также как с фиксированной или переменной шириной. Совместимость с ASCII означает, что независимо от контекста отдельные байты со значениями от 0x00 до 0x7F кодируют те же символы, что и в ASCII. Вы не хотите иметь ничего общего с кодировкой текста, не совместимой с ASCII, если вы можете этого избежать; наивные программы, ожидающие ASCII, имеют тенденцию неверно интерпретировать их катастрофическим, часто нарушающим безопасность образом. В настоящее время они настолько устарели, что (например) HTML5 запрещает их использование в общедоступной сети, за прискорбным исключением UTF-16 . Я больше не буду о них говорить.
Кодировка с фиксированной шириной означает то, что звучит так: все символы кодируются с использованием одинакового количества байтов. Чтобы быть ASCII-совместимой, фиксированная кодировка должна кодировать все свои символы, используя только один байт, поэтому она может содержать не более 256 символов. Наиболее распространенной в настоящее время такой кодировкой является Windows-1252 , расширение ISO 8859-1 .
В настоящее время стоит знать только одну ASCII-совместимую кодировку переменной ширины, но она очень важна: UTF-8 , которая упаковывает весь Unicode в ASCII-совместимую кодировку. Вы действительно хотите использовать это, если сможете.
В заключение, «ASCII» в настоящее время берет свое практическое определение из Unicode, а не из своего исходного стандарта (ANSI X3.4-1968), потому что исторически существовало несколько десятков вариантов 127-символьного репертуара ASCII - например, некоторые из пунктуация может быть заменена буквами с ударением для облегчения передачи французского текста. В настоящее время все эти варианты устарели, и когда люди говорят «ASCII», они имеют в виду, что байты со значением от 0x00 до 0x7F кодируют кодовые точки Unicode от U + 0000 до U + 007F. Вероятно, это будет иметь значение для вас только в том случае, если вы когда-нибудь столкнетесь с написанием технического стандарта.
Если вас интересует история ASCII и предшествующих ему кодировок, начните с статьи «Эволюция кодов символов, 1874-1968» (копия самиздата по адресу http://falsedoor.com/doc/ascii_evolution-of- character -code.pdf ), а затем искать его ссылки (многие из которых недоступны в Интернете и, к сожалению, могут быть трудно найти даже при доступе к университетской библиотеке).