Como descobrir se um terminal suporta UTF-8

21

Estou configurando o módulo CPAN para perl no CentOs 5, e uma das perguntas é 'Seu terminal suporta UTF-8?' (parafraseado). Como eu descubro?

O que é isso
fonte

Respostas:

15

Realmente, a maneira infalível de testar é fazer o download de um arquivo de texto e colocá-lo no terminal e ver se tudo está bem.

ou, se puder, recompile o terminal ativando a opção unicode (supondo que ele tenha um).

como são $ TERM e $ LANG?

theman_on_osx
fonte
$ TERM é "xterm" $ LANG é "en_US.UTF-8" (aha!) O arquivo de texto é exibido muito bem no terminal, mas, curiosamente, não no Firefox.
isso?
Sim, eu realmente encontrou a mesma coisa: - / ... quando eu tentei de therek sugestão, eu tenho o ponto de interrogação
theman_on_osx
O $ LANG apenas informa o que o seu sistema usará ao gravar no stdout / stderr. Não diz nada sobre as capacidades do terminal. No entanto, se tudo o que seu sistema imprime com caracteres estranhos parece bom, provavelmente o seu terminal suporta UTF-8.
Epcylon
2
Isso pode ser automatizado, exibindo algum texto e verificando sua largura (lendo a posição do cursor antes e depois). Publiquei uma prova de conceito e propus outra coisa.
Gilles 'SO- stop be evil'
@ Gilles, sua resposta é brilhantemente simples. Adoro!
20

Digite isso no seu terminal:

echo -e '\xe2\x82\xac' 

Se o seu terminal suportar UTF-8, ele emitirá o sinal de euro:

user9474
fonte
Nem todas as fontes têm o símbolo do euro, portanto, um ponto de código de teste diferente pode ser aconselhável.
Michael Hampton
5

O caminho mais lânguido: siga e verifique a saída. Será um O maiúsculo com circunflexo se o terminal exibir UTF-8.

perl -le 'print "\x{c3}\x{94}"'
seguir
fonte
Tenho certeza de que meu terminal suporta UTF-8 agora (passou no teste sugerido por theman_on_osx), mas isso apenas gera uma linha em branco. O que está acontecendo?
28909 Whatsit
Talvez a fonte que você está usando no aplicativo de terminal não suporte caracteres UTF-8.
28409 obrigada
4
Eu sei que isto é extremamente tarde mas o UTF-8 Out bandeira faz esse trabalho melhorperl -CO -le 'print "\x{d4}"'
Ashley
3
Ou, sem a opção -CO, forneça ao Perl os bytes UTF-8 corretos: $ perl -le 'print "\ x {c3} \ x {94}"' Ô
Tim
2

A maneira mais segura de disparar é usar o comando 'locale'. Ele imprimirá todas as variáveis ​​diversas que determinam qual conjunto de caracteres usar. Por exemplo, esta é minha saída no RHEL5.3, configurada para usar apenas UTF-8 por padrão.

LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL=
Scott Pack
fonte
1
Isso não testa o terminal, apenas a configuração da localidade (que na prática nem sempre é definida pelo emulador de terminal, pode não refletir o estado atual do terminal ou pode ter sido substituída por alguma configuração do usuário).
Gilles 'SO- stop be evil'
1

Você pode apenas usar o seguinte comando:

locale charmap
ss32
fonte
1
Isso não testa o terminal. Ele exibe apenas as configurações de localidade.
grawity
1
curl http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt

ou

wget -O - http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt

Isso obviamente requer wgetou curl.

Janus Troelsen
fonte
-1
UTF=$(echo -e "\u263A")
if [[ ! "$UTF" =~ "A" ]]  ; then
 echo -n "UNICODE here!"
fi
computermite
fonte
2
Isso não testa o terminal. Ele apenas testa se o echobuiltin suporta \u.
grawity