Como fazer o comando 'less' manipular UTF-8?

31

No meu terminal Mac, a impressão UTF-8 funciona em geral, mas lessnão funciona corretamente.

Então, isso funciona corretamente:

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

mas canalizá-lo para menos fornece algo como isto:

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

Como isso pode ser consertado?

Para diagnóstico:

Estou usando o Mac OS 10.6.8. menos versão 418, Terminal 2.1.2 (273.1).

A saída do meu código do idioma é 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"
user9474
fonte

Respostas:

43

Ok, encontrei a resposta depois de pesquisar no Google. Aparentemente, LESSCHARSETprecisa ser definido assim:

export LESSCHARSET=utf-8

Agora lessfunciona bem para mim.

user9474
fonte
Eu tive o mesmo problema no CentOS. Essa linha também a corrigiu lá.
Wim Deblauwe
9
Para mim o que resolveu o problema estava usando less -r(visualização caracteres de controle "brutos")
waldyrious
Isso funciona no Debian 8 também, obrigado!
Lucaferrario #
Alguém deve aceitar esta resposta! Resolve o problema.
Lensovet
2
less -rfaz a mesma coisa, mas também lida com emojis corretamente, o que export LESSCHARSET=utf-8não acontece.
Noah Sussman
6

Se você conseguir ver alguns caracteres unicode less, mas não conseguir lessexibir o emoji, tente atualizar lesspara uma versão mais recente. No Mac OS X, fui da versão 458 para 481 e isso corrigiu meu problema (por exemplo,git log agora é possível exibir emoji nas mensagens de confirmação).

Se você possui homebrew, pode substituir menos o sistema por uma versão mais recente executando brew install homebrew/dupes/less.

Luke Francl
fonte
Obrigado! Com as versões mais recentes do homebrew, você só precisa brew install lessobter a atualização.
Alex Ciminian
2

Funciona para mim com

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"
melhor cão
fonte
3
LC_CTYPE é o mais importante. No entanto, as regras que menos usos são bizarras: em vez de recuperar a codificação do código do idioma, ele procura a cadeia "utf-8" (ou algumas outras possibilidades) em seu nome. Portanto, você precisará usar LESSCHARSET se desejar outra codificação ou se o nome da localidade não corresponder aos preconceitos de less.
Richard Kettlewell
1

Eu pesquisei isso no Google e tentei as seguintes variáveis ​​de ambiente que funcionaram para mim:

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

Como encontro o LC_ALL em várias respostas diferentes, acho que essa é a correta. Mas talvez não seja a única resposta certa, é claro que poderia haver respostas mais corretas para essa pergunta.

De qualquer forma, mais pesquisas no Google me deram essa descrição para a variável:

LC_ALL Esta variável determina os valores para todas as categorias de localidade. O valor da variável de ambiente LC_ALL tem precedência sobre qualquer outra variável de ambiente iniciando com LC_ (LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME) e a variável de ambiente LANG.

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

Levando-me a pensar que esta é a variável de idioma para governar todos eles :)

Melvin Loos
fonte
Por favor, sinta-se livre para postar less'número da versão.
Deer Hunter
com certeza, menos 458 (expressões regulares GNU)
Melvin Loos
0

Apenas atualize você [less][1]

Faça com cerveja.

brew install homebrew/core/less
Ahmad Awais
fonte