Resumo

  • O RFC 1468 documentou um perfil estreito de sete bits: o texto começava em ASCII, quatro sequências de escape escolhiam estados de um ou dois bytes, e cada linha que usasse JIS X 0208 precisava abandonar esse estado antes do CRLF.
  • Declarar ISO-2022-JP no MIME selecionava a regra esperada, mas não provava a gramática do corpo, a preservação dos escapes pelo retransmissor, os caracteres reconstruídos pelo decodificador nem os glifos vistos pelo leitor.

Uma codificação com memória precisa saber onde esquecer. No ISO-2022-JP, a quebra de linha cumpria parte desse trabalho.

Publicado em junho de 1993, o RFC 1468 registrou uma prática nascida na JUNET e já difundida em comunidades IP japonesas. A solução mantinha a mensagem em sete bits, mas permitia alternar entre ASCII, JIS X 0201 Roman e duas versões de JIS X 0208. A alternância ocorria dentro do próprio corpo, por sequências que nada imprimiam.

O ganho foi compatibilidade sem transformar cada máquina de trânsito em uma máquina japonesa. O preço foi tornar a história anterior do fluxo parte do significado de cada byte. O padrão precisava, então, limitar essa história, dar a ela pontos de reinício e impedir que os intermediários a reescrevessem.

O escape era uma instrução, não um ornamento

O texto começa em ASCII. ESC $ B designa JIS X 0208-1983 e ESC $ @, a edição de 1978. Em ambos os estados, cada caractere usa dois bytes. ESC ( B retorna ao ASCII; ESC ( J seleciona o conjunto romano JIS X 0201.

Depois de um designador de dois bytes, os valores seguintes só podem ser entendidos em pares. Depois do retorno, valores iguais deixam de formar o mesmo caractere. O decodificador não consulta apenas uma tabela: ele mantém uma variável de estado determinada pelo último escape válido.

Até os estados de um byte divergem. JIS X 0201 Roman substitui as posições da barra invertida e do til pelo iene e pelo traço superior. Uma fonte local pode esconder a diferença, mas não elimina a designação. O conjunto Kana do JIS X 0201 ficou explicitamente fora do perfil. JP não significava “qualquer representação japonesa que este computador conhece”.

A sintaxe formal reservava ESC, SI e SO, excluindo-os dos caracteres comuns de um byte. Era a separação mínima entre instrução e dados. Se a implementação apagasse essa fronteira, o nome do charset não teria como recuperá-la.

A linha fechava o alcance do estado

Quando uma linha continha JIS X 0208, ela deveria mudar para ASCII ou JIS X 0201 Roman antes do CRLF. A próxima linha começaria no estado de um byte escolhido antes do fim da anterior. O texto completo terminaria em ASCII.

A repetição de escapes consumia espaço, mas comprava recuperação localizada. Um programa de citação poderia inserir > no início de uma nova linha sem transformá-lo na metade de um caractere. Um visualizador que saltasse para o meio do arquivo não dependeria de uma designação arbitrariamente distante. Um erro em uma linha teria menos chance de contaminar todas as seguintes.

O limite não era perfeito. Voltar ao Roman ainda deixava duas posições distintas do ASCII, e entradas malformadas continuavam exigindo uma política local de erro. Mesmo assim, o estado de dois bytes não podia atravessar silenciosamente a linha. O CRLF passou a ser também uma fronteira de interpretação.

Esse desenho é menor do que uma plataforma universal e maior do que uma convenção informal. Ele define exatamente o necessário para que implementações independentes retomem o mesmo estado, sem decidir como cada uma deve editar, armazenar ou exibir.

Sete bits resolviam o caminho, não a leitura

O uso MIME mostrado pelo RFC é Content-Type: text/plain; charset=iso-2022-jp. Como o corpo já é de sete bits, não se exige outra codificação de transferência apenas para vencer o limite do correio antigo.

Isso não torna o conteúdo resistente a qualquer intervenção. Remover ESC, substituir um designador, quebrar um par ou alterar CRLF pode produzir outro arquivo inteiramente de sete bits e semanticamente diferente. A largura dos valores e a função dos valores são evidências separadas.

O documento advertiu que Base64 ou quoted-printable tornariam a mensagem ilegível no software JUNET então existente. A afirmação pertence ao seu tempo. Uma transformação corretamente revertida pode manter os bytes; a falha ocorria quando o código efetivamente instalado não sabia combinar a camada de transferência com o charset. Possibilidade formal e interoperabilidade executada não são sinônimos.

O posterior RFC 2046 tratou charset como parâmetro crítico para texto MIME e manteve restrições de linha. A etiqueta declara de que caracteres o corpo pretende ser composto. Ela não registra que cada programa no percurso realizou a operação correta.

Um retransmissor não ganhava licença editorial

O RFC observa que alguns sistemas não distinguiam visualmente ESC ( B de ESC ( J, nem ESC $ @ de ESC $ B. Ainda assim, ao retransmitir, deveriam conservar as sequências sem alteração.

O que parece igual em uma tela não é necessariamente o mesmo objeto para o próximo receptor. Outra fonte pode expor iene onde a primeira mostrou barra invertida. Um conversor pode tratar revisões de JIS X 0208 de maneira diferente. Um arquivo pode precisar provar quais bytes chegaram, não apenas reproduzir um resultado confortável.

Preservar o original também distribui responsabilidade. Diante de um glifo inesperado, é possível comparar emissão, custódia, decodificação e renderização. Se o retransmissor normaliza por conta própria, sua decisão entra no objeto e apaga o ponto de divergência. Uma cópia mais uniforme pode ser uma prova menos íntegra.

Custódia fiel não autentica o remetente nem torna verdadeira a mensagem. Ela apenas impede o intermediário de transformar sua indiferença local em edição irreversível.

Bytes, caracteres e colunas não caminhavam juntos

O RFC aconselhou linhas de cerca de 75 a 80 colunas visíveis, deixando espaço para citação. No modelo adotado, um caractere JIS X 0208 ocupa dois bytes e duas colunas; o escape ocupa bytes e nenhuma coluna. O implementador não deve partir um par para ajustar a tela.

Há, portanto, três medidas. O deslocamento em bytes identifica a representação. A posição de caractere surge após a decodificação. A coluna depende da exibição. Elas parecem iguais no trecho ASCII e se separam ao primeiro designador. Cortar no octogésimo byte não é quebrar na octogésima coluna. Eliminar controles “invisíveis” antes de validar pode eliminar justamente a regra que explica o restante.

Um hash prova identidade do corpo, não do desenho na tela. Uma captura prova um desenho situado, não os bytes de entrada. Uma auditoria precisa ligar essas provas sem reduzir uma à outra.

O registro coordenava nomes

O RFC 2978 definiu charset como um método de converter sequências de octetos em caracteres, incluindo técnicas complexas de comutação ISO 2022. A definição associada ao nome deve especificar integralmente o mapeamento; um perfil oculto não pode completar o significado depois.

O registro de Character Sets da IANA mantém ISO-2022-JP como número 39, com referências ao RFC 1468 e ao RFC 2237, e registra separadamente ISO-2022-JP-2. Isso estabiliza o vocabulário. Não executa a conversão, não certifica software e não prova uso atual.

Os metadados do RFC Editor classificam o RFC 1468 como Informational, não como Internet Standard. Essa categoria não apaga o uso histórico que o documento descreveu; tampouco a entrada da IANA eleva qualquer mensagem rotulada a exemplo conforme. Situação editorial, nome registrado e comportamento em produção são camadas diferentes.

Mais estados exigiram outros nomes

O RFC 1554, de dezembro de 1993, criou o ISO-2022-JP-2 experimental e multilíngue. Acrescentou designações chinesas, coreanas, japonesas suplementares, latinas e gregas, além de outro domínio de estado com reinício por linha. A máquina ficou maior e ganhou um identificador diferente.

Em 1997, o RFC 2237 definiu ISO-2022-JP-1 para JIS X 0212, com ESC $ ( D. Conservou o término em ASCII e determinou que o ISO-2022-JP comum fosse usado quando não houvesse caracteres suplementares.

O nome novo revelava a obrigação adicional ao destinatário. Um programa antigo poderia recusar em vez de adivinhar. A evolução não precisava redefinir silenciosamente arquivos já existentes sob o nome anterior.

O contrato parava antes da percepção

Os documentos estabelecem como formar um fluxo conforme; não demonstram o que uma pessoa viu. Cabe separar cabeçalho MIME, bytes originais, transições, transformações no percurso, versão do decodificador, sequência de caracteres, fonte e imagem renderizada.

Os textos de Heng Lu ajudam a manter essa fronteira. Minimum Initial Specification mostra como um núcleo estreito preserva escolhas locais. Running-Code Primacy separa publicação de execução. On Reality Layers impede que nome, representação, renderização e reação sejam tratados como um único fato.

O RFC 1468 não prometeu eliminar essas distâncias. Ele tornou suas interfaces auditáveis: o nome escolhe a regra, o escape escolhe o estado, a linha limita o alcance, o retransmissor conserva e o endpoint interpreta. Foi assim que uma rede que não lia japonês pôde carregar correio japonês.