Usando caracteres UTF-8 com programa de mensagem 'write'

4

quando eu uso o programa write para enviar mensagens, como posso usar caracteres UTF-8?

Eu envio:

write user2
Ehilà! Com'è?

Mas o destinatário recebe:

Message from user1@samehost on pts/1 at 21:08 ...
EhilM-CM- ! Com'M-CM-(?

A máquina é a mesma e LANG no konsole já é en_US.UTF-8 .

    
por MMM 31.05.2012 / 21:16

1 resposta

9

Parece que write está interpretando o bit alto como 'meta-' (tecla Meta + ou Esc ). Uma rápida olhada no código fonte (função wr_fputs() in write.c ) confirma isso: os caracteres de controle são mostrados como ^X , os caracteres com o bit alto configurado são mostrados como M-X . Configurações de localização, terminais e codificações não têm nada a ver com isso, receio. write é apenas de 7 bits.

Agora, sou uma aberração Unicode, mas isso faz um sentido perverso. write apenas abre o alvo TTY e escreve para ele (não há mágica envolvida). Não há uma maneira fácil de entender a codificação de caracteres pelo processo que controla o TTY remoto. E mesmo se houvesse, nem todas as codificações são conversíveis para todas as outras codificações. E sem conversão, transmitir uma mensagem no KOI8-R para um console ISO-8859-1 falharia miseravelmente. Como write adota a abordagem simplista dos anos 70, é isso que conseguimos.

    
por 31.05.2012 / 22:30