¿Cómo hacer que el comando 'menos' maneje UTF-8?

31

En mi terminal Mac, la impresión UTF-8 funciona en general, pero lessno funciona correctamente.

Entonces esto funciona correctamente:

$  echo -e '\xe2\x82\xac'   
€

pero canalizarlo en menos da algo como esto:

$  echo -e '\xe2\x82\xac' | less  
<E2><82><AC>

¿Cómo se puede arreglar esto?

Para diagnósticos:

Estoy usando Mac OS 10.6.8. menos la versión 418, Terminal 2.1.2 (273.1).

La salida de mi localidad es esta:

$ locale
LANG="en_US.UTF-8"
LC_COLLATE="C"
LC_CTYPE="C"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL="C"
usuario9474
fuente

Respuestas:

43

Bien, encontré la respuesta después de buscar en Google. Aparentemente, LESSCHARSETdebe configurarse así:

export LESSCHARSET=utf-8

Ahora lessfunciona bien para mí.

usuario9474
fuente
Tuve el mismo problema en CentOS. Esta línea también lo arregló allí.
Wim Deblauwe
99
Para mí, lo que resolvió el problema fue usar less -r(mostrar caracteres de control "en bruto")
waldyrious
Esto también funciona en Debian 8, ¡gracias!
lucaferrario
¡Alguien debería aceptar esta respuesta! Soluciona el problema.
lensovet
2
less -rhace lo mismo pero también maneja los emojis correctamente, lo export LESSCHARSET=utf-8que no hace.
Noah Sussman
6

Si puede ver algunos caracteres Unicode less, pero no puede lessmostrar los emoji, intente actualizar lessa una versión más reciente. En Mac OS X, pasé de la versión 458 a la 481 y eso solucionó mi problema (por ejemplo, git logahora puede mostrar emoji en los mensajes de confirmación).

Si tiene homebrew, puede reemplazar el sistema menos con una versión más reciente ejecutando brew install homebrew/dupes/less.

Luke Francl
fuente
¡Gracias! Con las versiones más recientes de homebrew, solo necesita brew install lessobtener la actualización.
Alex Ciminian
2

Trabaja para mi con

LANG=
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="en_US.UTF-8"
mandamás
fuente
3
LC_CTYPE es el importante. Sin embargo, las reglas que menos usos son extrañas: en lugar de recuperar la codificación de la configuración regional, busca la cadena "utf-8" (o algunas otras posibilidades) en su nombre. Por lo tanto, deberá usar LESSCHARSET si desea algo otra codificación o si el nombre de su localidad no coincide con las ideas preconcebidas de less.
Richard Kettlewell
1

Busqué en Google esto y probé las siguientes variables de entorno que funcionaron para mí:

export LC_ALL=en_US.UTF-8
export LANG=en_us.UTF-8

Viendo que encuentro LC_ALL en múltiples respuestas diferentes, creo que esta es la correcta. Pero tal vez no sea la única respuesta correcta, por supuesto, podría haber respuestas más correctas a esta pregunta.

De todos modos, un poco más de google me dio esta descripción para la variable:

LC_ALL Esta variable determina los valores para todas las categorías locales. El valor de la variable de entorno LC_ALL tiene prioridad sobre cualquiera de las otras variables de entorno que comienzan con LC_ (LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME) y la variable de entorno LANG.

fuente: http://pubs.opengroup.org/onlinepubs/007908799/xbd/envvar.html

Me lleva a pensar que esta es la variable del lenguaje para gobernarlos a todos :)

Melvin Loos
fuente
Por favor, siéntase libre de publicar lessel número de versión.
Deer Hunter
claro, menos 458 (expresiones regulares de GNU)
Melvin Loos
0

Solo actualízalo [less][1]

Hazlo con cerveza.

brew install homebrew/core/less
Ahmad Awais
fuente