Respostas:
O terminal usa variáveis de ambiente para determinar qual conjunto de caracteres usar, portanto, você pode determinar olhando para essas variáveis:
echo $LC_CTYPE
ou
echo $LANG
locale
programa (como visto em outras respostas aqui).
locale
variáveis de ambiente para determinar sua codificação. O terminal pode, entretanto, permitir que os aplicativos que interagem com ele saibam sua codificação, definindo as locale
variáveis de ambiente. Por exemplo, no MacOS você pode escolher a codificação do terminal e, opcionalmente, definir as locale
variáveis de ambiente na inicialização do terminal Terminal
> Preferences
> Profiles
> Advanced
.
locale
O comando sem argumentos imprimirá os valores de todas as variáveis de ambiente relevantes, exceto LANGUAGE.
Para codificação atual:
locale charmap
Para localidades disponíveis:
locale -a
Para codificações disponíveis:
locale -m
Se você tiver Python:
python -c "import sys; print(sys.stdout.encoding)"
Que eu saiba, não.
Indicações de circunstanciais $LC_CTYPE
, locale
e tal pode parecer sedutoras, mas estes são completamente separado do que codifica para a aplicação de terminal (na verdade, um emulador) passa a ser utilizado quando a exibição de caracteres sobre a tela.
A única maneira de detectar a codificação com certeza é gerar algo apenas presente na codificação, por exemplo ä
, tirar uma captura de tela, analisar essa imagem e verificar se o caractere de saída está correto.
Então não, infelizmente não é possível.
Para ver as informações de localidade atuais, use o locale
comando. Abaixo está um exemplo no RHEL 7.8
[usr@host ~]$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=