Eu estava relendo a postagem clássica do blog de Joel Spolsky O Mínimo Absoluto que Todo Desenvolvedor de Software Absolutamente, Positivamente Deve Saber Sobre Unicode e Conjuntos de Caracteres (Sem Desculpas!) e notei esta passagem:
Eventualmente, este OEM gratuito foi codificado no padrão ANSI (ênfase minha). No padrão ANSI, todos concordavam sobre o que fazer abaixo de 128, que era praticamente o mesmo que ASCII, mas havia muitas maneiras diferentes de lidar com os caracteres de 128 em diante, dependendo de onde você morava. Esses diferentes sistemas foram chamados de páginas de código.
A qual padrão ANSI este texto se refere? Para ter certeza, o American National Standards Institute publicou vários padrões (afinal, é isso que eles realmente fazem), mas não consegui descobrir qual deles.
Meu palpite mais próximo sobre o que isso pode significar é que isso realmente fala sobre ISO-8859, e talvez este documento tenha começado como um padrão americano antes de ser adotado como um padrão internacional; mas isso não faz sentido no contexto da padronização de "páginas de código" e conjuntos de caracteres "OEM".
O artigo da página de código da Wikipédia menciona um padrão IBM e observa que a IANA mantém um registro de mapeamentos de página de código, mas, obviamente, nenhum deles é ANSI.
Meu entendimento é que o ANSI não padronizou nenhum conjunto moderno de caracteres de 8 bits e que "ANSI" neste contexto geralmente se refere à terminologia confusa agora abandonada da Microsoft (onde "ANSI" foi aparentemente usado para significar algo como o atual página de código selecionada).
Existe um padrão que estou negligenciando? Ou há apenas (suspiro) um erro no blog de Joel?
Este é um quebra-cabeça, então vamos reunir todos os fatos conhecidos. Nos estamos procurando por:
O resultado para mim é apenas um - o padrão ASCII . Acredito que este foi o primeiro padrão do ANSI a especificar os primeiros 128 pontos de código e, na verdade, também o último.
Embora o ASCII tenha evoluído em detalhes posteriormente, seu principal desenvolvimento começou em 1963. Esse padrão foi desenvolvido pela filial americana da International Organization for Standardization (ISO), que é a ANSI. Como esse padrão omitia referência a caracteres não americanos, e como as páginas de código que se seguiam e tentavam responder a essa pergunta eram uma verdadeira bagunça desorganizada, podendo concordar apenas com a parte ASCII, o trabalho de padronização foi assumido pelo organização internacional da própria ISO.
Historicamente falando, o padrão ISO/IEC 8859 chegou entre o ASCII e as páginas de código, mas não era um padrão ANSI, elaborado pela ISO.
"Páginas de código ANSI" era um nome impróprio para páginas de código do Windows criadas pela Microsoft e não pelo ANSI. Uma variante era a página de código do Windows-1252 , que mais tarde veio a ser conhecida como ISO/IEC 8859-1 .
A história real dos conjuntos de caracteres é bastante complicada, e um extenso trabalho de detetive seria necessário para estabelecer cronogramas, influências cruzadas e padrões ou definições de fato resultantes. Mas tudo foi iniciado pelo ASCII, que criou a base para toda evolução futura culminando em Unicode e UTF-8.
De acordo com a página da Wikipédia, os caracteres de controle C0 e C1 são definidos em ANSI x3.4.
Isso inclui as sequências de escape para formatação de texto estendida que são usadas pela ISO 2022 e ISO 8859 para permitir conjuntos de caracteres internacionais de vários bytes.
Por exemplo, ESC $ @ e ESC $ B alternam para diferentes codificações japonesas de 2 bytes, enquanto ESC ( B retorna para US-ASCII. Esses podem ser padrões ISO (ou ECMA), mas usam os códigos de controle ANSI, então provavelmente é um equívoco parcial.
Sem a contribuição de Joel, não podemos ter certeza, mas com base nas outras tentativas de resposta aqui e nas falhas que percebo nelas, deixe-me apresentar o que considero uma especulação óbvia e simples:
Não há nenhum padrão ANSI real aqui, e Joel está encobrindo as coisas.
O que exatamente está sendo resumido e possivelmente misturado aqui é definitivamente menos certo, mas meu palpite é que ele está falando sobre o desenvolvimento de páginas de código do Windows, que por um tempo foram chamadas de "páginas de código ANSI" pela Microsoft, embora nunca era qualquer conexão tangível com o American National Standards Institute, possivelmente fora de um esforço malsucedido para padronizar a página de código 1252 do Windows como um "ASCII estendido" com vários caracteres acentuados para alguns idiomas da Europa Ocidental e símbolos úteis para composição e expressões matemáticas simples. De acordo com algumas fontes, isso é o que resultou no ISO/IEC 8859-1 e, eventualmente, na família maior de padrões ISO 8859 para conjuntos de caracteres de 8 bits para várias regiões (consulte tambémECMA-94 ).
Para que conste, o ASA e depois ANSI Committee X3 foi responsável pelo padrão ASCII (ASA X3.4, depois ANSI X3.4, depois ISO 646), bem como pelo padrão X3.64 para sequências de controle de tela ASCII para terminais de exibição. Publicações notáveis deste comitê no final dos anos 1980 incluem uma proposta para a linguagem C e algo chamado "Pascal estendido", bem como a interface de hardware SCSI, mas não consegui encontrar nada relacionado a conjuntos de caracteres desse período.
https://en.wikipedia.org/wiki/ASCII#History
De acordo com esta lista, o primeiro padrão ANSI definindo ASCII foi o ANSI X3.4-1977.