Come rendere il comando 'less' gestire UTF-8?


31

Sul mio terminale Mac, la stampa UTF-8 funziona in generale, ma lessnon funziona correttamente.

Quindi funziona correttamente:

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

ma collegarlo a less dà qualcosa del genere:

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

Come si puo aggiustare?

Per la diagnostica:

Sto usando Mac OS 10.6.8. meno versione 418, Terminal 2.1.2 (273.1).

L'output della mia locale è questo:

$ 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"

Risposte:


43

Ok, ho trovato la risposta dopo aver cercato su Google. Apparentemente, LESSCHARSETdeve essere impostato in questo modo:

export LESSCHARSET=utf-8

Ora lessfunziona bene per me.


Ho avuto lo stesso problema su CentOS. Questa linea l'ha anche risolto lì.
Wim Deblauwe,

9
Per me ciò che ha risolto il problema stava usando less -r(visualizza i caratteri di controllo "grezzi")
waldyrious

Funziona anche in Debian 8, grazie!
lucaferrario,

Qualcuno dovrebbe accettare questa risposta! Risolve il problema.
Lensovet,

2
less -rfa la stessa cosa ma gestisce anche correttamente gli emoji, il che export LESSCHARSET=utf-8non lo fa.
Noah Sussman,

6

Se riesci a vedere alcuni caratteri unicode less, ma non riesci lessa visualizzare le emoji, prova a passare lessa una versione più recente. Su Mac OS X, sono passato dalla versione 458 alla 481 e questo ha risolto il mio problema (ad esempio, git logora posso visualizzare le emoji nei messaggi di commit).

Se hai l'homebrew, puoi sostituire il sistema meno con una versione più recente eseguendo brew install homebrew/dupes/less.


Grazie! Con le versioni più recenti di homebrew, devi solo brew install lessottenere l'aggiornamento.
Alex Ciminian,

2

Funziona con me

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"

3
LC_CTYPE è quello importante. Tuttavia le regole meno utilizzate sono bizzarre: invece di recuperare la codifica dalla locale, cerca la stringa "utf-8" (o poche altre possibilità) nel suo nome. Quindi dovrai usare LESSCHARSET se vuoi altra codifica o se il nome della tua locale non corrisponde ai preconcetti di less.
Richard Kettlewell,

1

Ho cercato su Google questo e ho provato le seguenti variabili d'ambiente che hanno funzionato per me:

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

Visto che trovo LC_ALL in più risposte diverse, penso che questa sia quella corretta. Ma forse non è l'unica risposta giusta, ovviamente ci potrebbero essere risposte più corrette a questa domanda.

Comunque qualche altro googling mi ha dato questa descrizione per la variabile:

LC_ALL Questa variabile determina i valori per tutte le categorie di locale. Il valore della variabile d'ambiente LC_ALL ha la precedenza su qualsiasi altra variabile d'ambiente che inizia con LC_ (LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME) e la variabile d'ambiente LANG.

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

Portandomi a pensare che questa sia la variabile linguistica per dominarli tutti :)


Sentiti libero di pubblicare lessil numero di versione.
Deer Hunter,

certo, meno 458 (espressioni regolari GNU)
Melvin Loos,

0

Ti aggiorno e basta [less][1]

Fallo con la birra.

brew install homebrew/core/less
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.