ASCII foi originalmente concebido como um código de 7 bits. Isso foi feito bem antes dos bytes de 8 bits se tornarem onipresentes e, mesmo na década de 1990, era possível encontrar software que presumia que poderia usar o 8º bit de cada byte de texto para seus próprios fins ("não limpo de 8 bits"). Hoje em dia as pessoas pensam nisso como uma codificação de 8 bits em que os bytes 0x80 a 0xFF não têm significado definido, mas isso é um retcon .
Existem dezenas de codificações de texto que fazem uso do 8º bit; eles podem ser classificados como compatíveis com ASCII ou não, e com largura fixa ou variável. Compatível com ASCII significa que, independentemente do contexto , bytes únicos com valores de 0x00 a 0x7F codificam os mesmos caracteres que em ASCII. Você não quer se envolver com uma codificação de texto não compatível com ASCII, se puder evitá-la; programas ingênuos que esperam ASCII tendem a interpretá-los erroneamente de maneira catastrófica, muitas vezes quebrando a segurança. Eles estão tão obsoletos hoje em dia que (por exemplo) o HTML5 proíbe seu uso na Web pública, com a infeliz exceção do UTF-16 . Não vou mais falar sobre eles.
Uma codificação de largura fixa significa o que parece: todos os caracteres são codificados usando o mesmo número de bytes. Para ser compatível com ASCII, uma codificação fixa com deve codificar todos os seus caracteres usando apenas um byte, portanto, não pode ter mais de 256 caracteres. A codificação mais comum hoje em dia é Windows-1252 , uma extensão do ISO 8859-1 .
Há apenas uma codificação compatível com ASCII de largura variável que vale a pena conhecer hoje em dia, mas é muito importante: UTF-8 , que compacta todo o Unicode em uma codificação compatível com ASCII. Você realmente deseja usar isso, se puder.
Como uma nota final, "ASCII" hoje em dia tem sua definição prática do Unicode, não seu padrão original (ANSI X3.4-1968), porque historicamente havia várias dezenas de variações no repertório de 127 caracteres ASCII - por exemplo, alguns de a pontuação pode ser substituída por letras acentuadas para facilitar a transmissão do texto em francês. Hoje em dia, todas essas variações são obsoletas, e quando as pessoas dizem "ASCII", isso significa que os bytes com valor 0x00 a 0x7F codificam pontos de código Unicode U + 0000 a U + 007F. Isso provavelmente só importará para você se você se pegar escrevendo um padrão técnico.
Se você estiver interessado na história do ASCII e nas codificações que o precederam, comece com o artigo "The Evolution of Character Codes, 1874-1968" (cópia samizdat em http://falsedoor.com/doc/ascii_evolution-of- character-codes.pdf ) e, em seguida, perseguir suas referências (muitas das quais não estão disponíveis online e podem ser difíceis de encontrar mesmo com acesso a uma biblioteca universitária, lamento dizer).