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).
No Linux
man ascii
diz:fonte
A tabela ASCII original é codificada em 7 bits, portanto, possui 128 caracteres.
Hoje em dia a maioria dos leitores / editores usa uma tabela ASCII "estendida" (da ISO 8859-1 ), que é codificada em 8 bits e tem 256 caracteres (incluindo Á , Ä , Œ , é , è e outros caracteres úteis também para idiomas europeus como glifos matemáticos e outros símbolos).
Enquanto UTF-8 usa a mesma codificação como a tabela básica ASCII (significado
0x41
é Um em ambos os códigos), ele não compartilha a mesma codificação para o bloco "Latim estendido-A". O que às vezes faz com que caracteres estranhos apareçam em palavras como à la carte ou piñata .fonte
A codificação ASCII é de 7 bits, mas, na prática, os caracteres codificados em ASCII não são armazenados em grupos de 7 bits. Em vez disso, um ASCII é armazenado em um byte, com o MSB geralmente definido como 0 (sim, é desperdiçado em ASCII).
Você pode verificar isso inserindo uma string no conjunto de caracteres ASCII em um editor de texto, definindo a codificação para ASCII e visualizando o binário / hex:
A parte: o uso de codificação (estritamente) ASCII agora é incomum, em favor de UTF-8 (que não desperdiça o MSB mencionado acima - na verdade, um MSB de 1 indica que o ponto de código está codificado com mais de 1 byte).
fonte
O código ASCII original fornecia 128 caracteres diferentes numerados de 0 a 127. ASCII a 7 bits são sinônimos, visto que o byte de 8 bits é o elemento de armazenamento comum, o ASCII deixa espaço para 128 caracteres adicionais que são usados para idiomas estrangeiros e outros símbolos. Mas o código de 7 bits foi criado antes do código de 8 bits. ASCII significa Código Padrão Americano para Intercâmbio de Informações. Nos primeiros sistemas de correio da Internet, ele suportava apenas códigos ASCII de 7 bits, porque ele podia executar programas e arquivos multimídia em sistemas de suck. Esses sistemas usam 8 bits do byte, mas então ele deve ser transformado em um formato de 7 bits usando métodos de codificação como MIME, UUcoding e BinHex. Isso significa que o 8 bits foi convertido em caracteres de 7 bits, o que adiciona bytes extras para codificá-los.
fonte
quando chamamos ASCII como código de 7 bits, o bit mais à esquerda é usado como bit de sinal, então com 7 bits podemos escrever até 127. isso significa de -126 a 127 porque o valor máximo de imam de ASCII é de 0 a 255. isso pode ser apenas satisfeito com o argumento de 7 bits se o último bit for considerado como um bit de sinal
fonte