Cómo averiguar si un terminal es compatible con UTF-8

21

Estoy configurando el módulo CPAN para perl en CentOs 5, y una de las preguntas es '¿Su terminal admite UTF-8?' (parafraseado) ¿Cómo me entero?

Que es eso
fuente

Respuestas:

15

Realmente, la forma segura de probar es descargar un archivo de texto y colocarlo en la terminal y ver si todo parece estar bien.

o, si puede, vuelva a compilar el terminal que habilita la opción Unicode (suponiendo que tenga una).

¿Cómo se ve $ TERM y $ LANG?

theman_on_osx
fuente
$ TERM es "xterm" $ LANG es "en_US.UTF-8" (¡ajá!) El archivo de texto se muestra muy bien en la terminal, pero curiosamente, no en Firefox.
Qué hay
sí, realmente encontré lo mismo: - / ... cuando probé la sugerencia de therek, recibí el signo de interrogación
theman_on_osx
$ LANG solo le dice qué usará su sistema cuando escriba en stdout / stderr. No dice nada sobre las capacidades del terminal. Sin embargo, si todo lo que su sistema imprime de caracteres extraños se ve bien, entonces su terminal probablemente sea compatible con UTF-8.
Epcylon
3
Esto incluso se puede automatizar, mostrando algo de texto y verificando su ancho (leyendo la posición del cursor antes y después). Publiqué una prueba de concepto a propos otra cosa.
Gilles 'SO- deja de ser malvado'
@Gilles, tu respuesta es increíblemente simple. ¡Quiéralo!
20

Escriba esto en su terminal:

echo -e '\xe2\x82\xac' 

Si su terminal admite UTF-8, mostrará el símbolo del euro:

usuario9474
fuente
No todas las fuentes tienen el símbolo del euro, por lo que podría ser aconsejable un punto de código de prueba diferente.
Michael Hampton
5

La forma más aburrida: ejecute el siguiente seguimiento y verifique la salida. Será una O mayúscula con circunflejo si el terminal muestra UTF-8.

perl -le 'print "\x{c3}\x{94}"'
ahi
fuente
Estoy bastante seguro de que mi terminal admite UTF-8 ahora (pasó la prueba sugerida por theman_on_osx) pero esto solo genera una línea en blanco. ¿Que esta pasando?
Qué hay
Tal vez la fuente que está utilizando en su aplicación de terminal no admite caracteres UTF-8.
therek
44
Sé que esto es extremadamente tarde, pero la bandera UTF-8 Out hace que eso funcione mejorperl -CO -le 'print "\x{d4}"'
Ashley
3
O sin la opción -CO, dele a Perl los bytes UTF-8 correctos: $ perl -le 'print "\ x {c3} \ x {94}"' Ô
Tim
2

La forma de disparo más segura es usar el comando 'locale'. Imprimirá todas las diversas y variadas variables que dictan qué conjunto de caracteres usar. Por ejemplo, este es mi resultado en RHEL5.3, configurado para usar solo UTF-8 de forma predeterminada.

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
fuente
1
Esto no prueba el terminal, solo la configuración regional (que en la práctica no siempre es establecida por el emulador de terminal, puede no reflejar el estado actual del terminal o puede haber sido anulada por alguna configuración del usuario).
Gilles 'SO- deja de ser malvado'
1

Puede usar el siguiente comando:

locale charmap
ss32
fuente
1
Esto no prueba la terminal. Solo muestra la configuración regional.
Grawity
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

Obviamente esto requiere wgeto curl.

Janus Troelsen
fuente
-1
UTF=$(echo -e "\u263A")
if [[ ! "$UTF" =~ "A" ]]  ; then
 echo -n "UNICODE here!"
fi
computermite
fuente
2
Esto no prueba la terminal. Solo prueba si el echobuiltin es compatible \u.
Grawity