Resumo

  • O RFC 1843, publicado em agosto de 1995, descreveu HZ como um formato de sete bits para misturar ASCII e chinês GB2312. ~{ entrava em modo GB, ~} voltava ao ASCII e ~~ produzia um til literal.
  • O decodificador básico lia um fluxo sem limite de comprimento de linha. Separadamente, o RFC recomendava que codificadores produzissem linhas com menos de 80 caracteres para ferramentas como more, fechando o modo GB antes de continuar o texto na próxima linha física.

O sinal mais barato da sala ganhou um segundo emprego

Num ambiente pensado para ASCII, boa parte dos bytes visíveis já tinha uma interpretação familiar. Caracteres chineses exigiam dois bytes nos códigos em uso, e sistemas diferentes guardavam esses caracteres de maneiras diferentes. Fung Fung Lee apresentou o HZ como uma forma de trocar texto misto por ambientes de sete bits, incluindo o correio eletrônico, usando GB2312 como referência compartilhada. O RFC saiu em 1995; seu resumo informa que reproduz um artigo escrito pelo autor em setembro de 1989. A ideia chegou ao arquivo público com alguns anos de viagem nas costas.

O leitor HZ começava em modo ASCII. Caracteres comuns passavam como estavam, até aparecer um til. ~~ representava o próprio til; ~{ abria o modo GB; til seguido imediatamente por LF era uma continuação de linha, consumida sem produzir texto. Em modo GB, a leitura ocorria em pares de bytes, até ~} devolver o fluxo ao ASCII. O mesmo valor numérico podia ser letra simples ou metade de um caractere chinês. A diferença vinha do modo vigente, uma pequena memória que o decodificador carregava ao longo da sequência.

O RFC explica por que escolheu aquele sinal. O primeiro byte de um código GB vai de $21 a $77 em hexadecimal; o segundo, de $21 a $7E. O ASCII gráfico ocupa valores sobrepostos. O til tem valor $7E, fora da faixa permitida para o primeiro byte GB. Ele podia, portanto, anunciar uma mudança sem parecer o começo normal de um caractere chinês. Uma tecla despretensiosa virou o funcionário encarregado de trocar os trilhos.

O desenho também preservava a legibilidade do inglês. Com exceção dos tildes que precisavam ser duplicados, os caracteres ASCII apareciam no arquivo como ASCII. Um texto inteiramente ASCII e sem til tinha a mesma aparência de um arquivo ASCII comum. Uma frase podia começar em inglês, passar por uma expressão chinesa e voltar, sem esconder o parágrafo inteiro dentro de um bloco opaco. HZ organizava a alternância livre entre as duas leituras.

As quebras de linha são o detalhe que dá graça à arquitetura. Til mais LF marca uma continuação que desaparece quando o texto é decodificado. O emissor podia reduzir uma linha física longa sem criar uma nova linha na frase reconstruída. O RFC 1843 diz que o decodificador básico dispensa a noção de linha: o arquivo pode ter uma linha enorme ou nenhuma quebra. Basta conhecer o modo atual e olhar no máximo um caractere à frente. Essa é a parte comum da conversa entre programas.

Só que leitores reais tinham paginadores e terminais com largura limitada. Lee recomendou que o codificador mantivesse as linhas físicas abaixo de 80 caracteres para programas Unix como more. Quando um trecho chinês alcançava o fim da linha, era possível fechá-lo com ~}, inserir o til seguido de LF e abri-lo de novo com ~{ na linha seguinte. O arquivo ganhava alguns bytes; o texto recuperado seguia contínuo. Os exemplos do RFC mostram arranjos diferentes de bytes que voltam a produzir a mesma saída.

O documento chamava essa escolha de estilo de codificação acrescentado ao formato básico. Um remetente podia preferir linhas curtas para o seu terminal; outro podia manter um fluxo longo. O mesmo decodificador entenderia os dois. Lee observou ainda que, conhecido o modo corrente, era possível percorrer o fluxo para trás, algo útil a um emulador de terminal diante da tecla de apagar. O projeto olhava para a exibição e a edição do texto, além da transmissão entre sistemas.

O RFC 1922, publicado em 1996, tratou mensagens chinesas com as regras diferentes de ISO-2022-CN, ligadas a designações e retorno de estado por linha. A história particular do HZ está no interruptor de til e na liberdade de dobrar as linhas sem aumentar a obrigação do leitor comum. A passagem de sete bits era estreita. O porteiro precisava de poucas instruções e, por isso mesmo, conseguia deixar entrar muita coisa.