Comment faire la commande «moins» UTF-8?

31

Sur mon terminal Mac, l'impression UTF-8 fonctionne en général, mais lessne fonctionne pas correctement.

Donc, cela fonctionne correctement:

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

mais le canaliser en moins donne quelque chose comme ceci:

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

Comment résoudre ce problème?

Pour les diagnostics:

J'utilise Mac OS 10.6.8. moins la version 418, Terminal 2.1.2 (273.1).

La sortie de mes paramètres régionaux est la suivante:

$ 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"
user9474
la source

Réponses:

43

D'accord, j'ai trouvé la réponse après quelques recherches sur Google. Apparemment, LESSCHARSETdoit être défini comme ceci:

export LESSCHARSET=utf-8

Ça lessmarche bien pour moi.

user9474
la source
J'ai eu le même problème sur CentOS. Cette ligne l'a également corrigé là.
Wim Deblauwe
9
Pour moi, ce qui a résolu le problème était d'utiliser less -r(afficher les caractères de contrôle "bruts")
waldyrious
Cela fonctionne aussi dans Debian 8, merci!
lucaferrario
Quelqu'un devrait accepter cette réponse! Cela résout le problème.
lensovet
2
less -rfait la même chose mais gère également les emojis correctement, ce qui export LESSCHARSET=utf-8n'est pas le cas.
Noah Sussman
6

Si vous pouvez voir certains caractères Unicode dans less, mais ne parvenez pas lessà afficher les emoji, essayez de passer lessà une version plus récente. Sur Mac OS X, je suis passé de la version 458 à 481 et cela a résolu mon problème (par exemple, git logpeut maintenant afficher des emoji dans les messages de validation).

Si vous avez homebrew, vous pouvez remplacer le système moins par une version plus récente en exécutant brew install homebrew/dupes/less.

Luke Francl
la source
Merci! Avec les nouvelles versions de homebrew, il vous suffit brew install lessd'obtenir la mise à niveau.
Alex Ciminian
2

Fonctionne pour moi avec

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"
topdog
la source
3
LC_CTYPE est le plus important. Cependant, les règles moins utilisées sont bizarres: au lieu de récupérer l'encodage à partir des paramètres régionaux, il recherche la chaîne "utf-8" (ou quelques autres possibilités) dans son nom. Vous devrez donc utiliser LESSCHARSET si vous en voulez autre encodage ou si le nom de votre locale ne correspond pas aux idées préconçues de less.
Richard Kettlewell
1

J'ai googlé cela et essayé les variables d'environnement suivantes qui ont fonctionné pour moi:

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

Étant donné que je trouve le LC_ALL dans plusieurs réponses différentes, je pense que c'est la bonne. Mais peut-être pas la seule bonne réponse, il pourrait bien sûr y avoir des réponses plus correctes à cette question.

Quoi qu'il en soit, un peu plus de recherche sur Google m'a donné cette description de la variable:

LC_ALL Cette variable détermine les valeurs de toutes les catégories de paramètres régionaux. La valeur de la variable d'environnement LC_ALL a priorité sur toutes les autres variables d'environnement commençant par LC_ (LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME) et la variable d'environnement LANG.

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

Me conduisant à penser que c'est la variable de langue pour les gouverner tous :)

Melvin Loos
la source
N'hésitez pas à publier lessle numéro de version.
Deer Hunter
bien sûr, moins 458 (expressions régulières GNU)
Melvin Loos
0

Il vous suffit de vous mettre à jour [less][1]

Faites-le avec de l'infusion.

brew install homebrew/core/less
Ahmad Awais
la source