Eu recomendo verificar a saída de locale charmap
(que relata os valores definidos por $ LANG, $ LC_CTYPE, $ LC_ALL). Este não consulta diretamente o terminal, mas é essencial para a maioria dos aplicativos que o código de idioma esteja configurado corretamente, consistentemente com o terminal. Se ele relatar qualquer outra coisa além do comportamento real, não apenas seu aplicativo, mas praticamente todos os outros aplicativos se comportarão mal no terminal, e não é sua culpa. Claro que o usuário pode mudar a codificação do menu, mas se eles decidirem se atirar no pé, não há muito o que você pode / deve fazer contra. Não é sua tarefa detectar uma configuração com falha no sistema. Além disso, não há como você perceber se o usuário alterna a codificação enquanto seu aplicativo está em execução, portanto, não acho que seja importante verificar isso na inicialização.
Se realmente precisar verificar o comportamento do tempo de execução, você pode emitir seqüências de escape que consultam a posição do cursor (e relatá-lo em um determinado formato como se ele tivesse sido digitado no teclado) e emitem alguns bytes forma um único caractere em UTF-8 enquanto vários caracteres em qualquer outra codificação (desabilitando o eco local no tempo médio, de forma que as teclas pressionadas pelo usuário não avançam o cursor), e consulta a posição do cursor novamente. Talvez seja muito trabalhoso e realmente não vale o esforço.