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.