De Wikipedia :
On POSIX platforms, locale identifiers are defined similarly to the BCP 47 definition of language tags, but the locale variant modifier is defined differently, and the character encoding is included as a part of the identifier.
It is defined in this format: [language[_territory][.codeset][@modifier]]. (For example, Australian English using the UTF-8 encoding is en_AU.UTF-8.)
No entanto, se o sufixo do conjunto de códigos estiver ausente no identificador de localidade, por exemplo, como em en_AG
(consulte esta pergunta , então o conjunto de código é definido por uma configuração padrão para essa localidade, que poderia muito bem ser UTF -8. Como resultado, a codificação atual não pode ser determinada observando a variável de ambiente LANG.
Além disso, o comando locale
mostra apenas os valores atuais das variáveis de ambiente. Portanto, parece que esse comando não pode ser usado para determinar o conjunto de códigos.
No entanto, há um módulo Perl I18N::Langinfo
, veja também question que parece ser uma solução:
perl -MI18N::Langinfo=langinfo,CODESET -E 'say "Uses UTF-8 encoding .." if langinfo(CODESET()) eq "UTF-8"'
Este módulo Perl é um wrapper para a função da biblioteca C nl_langinfo .