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"

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.


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.


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"

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 :)


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.