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 ), а затем искать его ссылки (многие из которых недоступны в Интернете и, к сожалению, могут быть трудно найти даже при доступе к университетской библиотеке).
В Linux
man ascii
говорит:источник
Исходная таблица ASCII кодируется на 7 бит поэтому имеет 128 символов.
В настоящее время большинство читателей / редакторов используют «расширенную» таблицу ASCII (из ISO 8859-1 ), которая закодирована на 8 бит и содержит 256 символов (включая Á , Ä , Œ , é , è и другие символы, также полезные для европейских языков. как математические глифы и другие символы).
В то время как UTF-8 использует ту же кодировку в качестве основной таблицы ASCII (значение
0x41
является в обоих кодов), он не разделяет ту же кодировку для блока «Расширенная латиница-A». Иногда в таких словах, как à la carte или piñata, появляются странные символы .источник
Кодировка ASCII 7-битная, но на практике символы, закодированные в ASCII, не хранятся в группах по 7 бит. Вместо этого один ASCII хранится в байте, при этом MSB обычно устанавливается в 0 (да, он теряется в ASCII).
Вы можете проверить это, введя строку в наборе символов ASCII в текстовом редакторе, установив кодировку ASCII и просмотрев двоичное / шестнадцатеричное:
Кроме того: использование (строго) кодировки ASCII сейчас необычно, в пользу UTF-8 (который не тратит впустую упомянутый выше MSB - фактически, MSB, равный 1, указывает, что кодовая точка закодирована более чем 1 байтом).
источник
Исходный код ASCII содержал 128 различных символов, пронумерованных от 0 до 127. ASCII и 7-битный байт являются синонимами, поскольку 8-битный байт является общим элементом хранения, ASCII оставляет место для 128 дополнительных символов, которые используются для иностранных языков и других символов. Но 7-битный код был изначально создан до 8-битного кода. ASCII - американский стандартный код для обмена информацией. В ранних системах электронной почты он поддерживал только 7-битные коды ASCII, потому что тогда он мог выполнять программы и мультимедийные файлы через отстойные системы. Эти системы используют 8 бит байта, но затем его необходимо преобразовать в 7-битный формат, используя такие методы кодирования, как MIME, UUcoding и BinHex. Это означает, что 8-битные символы были преобразованы в 7-битные символы, что добавляет дополнительные байты для их кодирования.
источник
когда мы называем ASCII 7-битным кодом, самый левый бит используется как знаковый бит, поэтому с 7 битами мы можем записать до 127. Это означает от -126 до 127, потому что максимальное значение имама ASCII составляет от 0 до 255. это может быть удовлетворяется аргументом 7 бит, только если последний бит считается битом знака
источник