Come scoprire se un terminale supporta UTF-8


21

Sto configurando il modulo CPAN per perl su CentOs 5 e una delle domande è "Il tuo terminale supporta UTF-8?" (Parafrasato). Come lo scopro?

Risposte:


15

Davvero, il modo infallibile per testare è scaricare un file di testo e inserirlo nel terminale e vedere se tutto sembra a posto.

oppure, se possibile, ricompilare il terminale abilitando l'opzione unicode (supponendo che ne abbia uno).

che aspetto hanno $ TERM e $ LANG?


$ TERM è "xterm" $ LANG è "en_US.UTF-8" (aha!) Il file di testo viene visualizzato bene nel terminale, ma curiosamente, non in Firefox.
Che cosa è

sì, in realtà ho incontrato la stessa cosa: - / ... quando ho provato il suggerimento di therek, ho ottenuto il punto interrogativo
theman_on_osx,

$ LANG ti dice semplicemente quale sarà il tuo sistema quando scriverà su stdout / stderr. Non dice nulla sulle capacità del terminale. Tuttavia, se tutto ciò che il tuo sistema stampa di strani personaggi sembra a posto, allora il tuo terminale probabilmente supporta UTF-8.
Epcylon,

3
Questo può anche essere automatizzato, visualizzando del testo e controllandone la larghezza (leggendo la posizione del cursore prima e dopo). Ho pubblicato una prova di concetto, proponendo qualcos'altro.
Gilles 'SO- smetti di essere malvagio' il

@Gilles, la tua risposta è straordinariamente semplice. Lo adoro!

20

Digita questo nel tuo terminale:

echo -e '\xe2\x82\xac' 

Se il tuo terminale supporta UTF-8 emetterà il simbolo dell'euro:


Non tutti i caratteri hanno il simbolo dell'euro, quindi potrebbe essere consigliabile un diverso punto di codice di prova.
Michael Hampton

5

Il modo più debole: corri seguendo e controlla l'output. Sarà una O maiuscola con circonflesso se il terminale visualizza UTF-8.

perl -le 'print "\x{c3}\x{94}"'

Sono abbastanza sicuro che il mio terminale supporti UTF-8 ora (ha superato il test suggerito da theman_on_osx) ma questo emette solo una riga vuota. Cosa sta succedendo?
Che cosa è

Forse il carattere che stai utilizzando nell'app del terminale non supporta i caratteri UTF-8.
therek

4
So che è estremamente tardi, ma la bandiera UTF-8 Out lo fa funzionare meglioperl -CO -le 'print "\x{d4}"'
Ashley,

3
O senza l'opzione -CO, dai a Perl i byte UTF-8 corretti: $ perl -le 'print "\ x {c3} \ x {94}"' Ô
Tim

2

Il modo più sicuro è usare il comando 'locale'. Stamperà tutte le varie e varie variabili che determinano quale set di caratteri utilizzare. Ad esempio, questo è il mio output su RHEL5.3, impostato per utilizzare solo UTF-8 per impostazione predefinita.

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=

1
Questo non verifica il terminale, ma solo l'impostazione della locale (che in pratica non è sempre impostata dall'emulatore di terminale, potrebbe non riflettere lo stato corrente del terminale o potrebbe essere stata ignorata da una configurazione utente).
Gilles 'SO- smetti di essere malvagio' il

1

Puoi semplicemente usare il seguente comando:

locale charmap

1
Questo non verifica il terminale. Visualizza solo le impostazioni locali.
gravità

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

o

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

Questo ovviamente richiede wgeto curl.


-1
UTF=$(echo -e "\u263A")
if [[ ! "$UTF" =~ "A" ]]  ; then
 echo -n "UNICODE here!"
fi

2
Questo non verifica il terminale. Verifica solo se l' echointegrato supporta \u.
gravità
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.