Descobrir qual método de codificação usa menos para exibir o conteúdo de um arquivo de texto?

1

Existe um arquivo de texto simples, que o Emacs não pode exibir corretamente, mas less pode.

Gostaria de saber se less detecta automaticamente o método de codificação para cada arquivo de texto individual ou apenas usa um único método de codificação padrão para todos os arquivos de texto?

Como posso descobrir o método de codificação que less usa para decodificar um arquivo de texto?

    
por Tim 15.01.2015 / 16:57

2 respostas

5

O executável less em si não faz nenhuma conversão de codificação: ele envia os caracteres imprimíveis diretamente para o terminal. O que é considerado imprimível é controlado pela variável de ambiente LESSCHARSET (consulte a página do manual para obter detalhes), mas, em geral, você não quer tocá-lo. Então, basicamente, a codificação é obtida a partir das localidades (exceto com configurações particulares).

A entrada pode ser filtrada, em particular para fazer uma conversão, se a variável de ambiente LESSOPEN estiver configurada. O filtro correspondente pode informar se ele fez alguma conversão; isso é o que o lesspipe de Wolfgang Friebel faz, por exemplo.

Você pode usar o utilitário file para obter a codificação. Por exemplo:

$ file my_file.txt
my_file.txt: UTF-8 Unicode text

Isso provavelmente é melhor do que confiar em less .

    
por 15.01.2015 / 18:08
2

less usará o UTF-8 na maioria dos sistemas atuais. De man less :

If neither LESSCHARSET nor LESSCHARDEF is set, but any of the strings
"UTF-8", "UTF8", "utf-8" or "utf8" is found in the LC_ALL, LC_CTYPE or
LANG environment variables, then the default character set is utf-8.

If that string is not found, but your system supports the setlocale
interface, less will use setlocale to determine the character set.
setlocale is controlled by setting the LANG or LC_CTYPE environment
variables.

Finally, if the setlocale interface is also not available, the default
character set is latin1.

Para garantir que less funcione dessa maneira, crie um arquivo com o seguinte conteúdo:

ąśćã

Imprima com less . Se todos os caracteres forem exibidos corretamente, isso significa que seu LANG contém UTF-8. Veja-o com o comando locale ou imprima a variável $LANG . Agora mude sua localidade para algo sem UTF-8 no nome, por exemplo:

$ export LANG=en_US

Imprima este arquivo novamente. Caracteres Unicode não devem ser impressos corretamente.

Eu também uso o Emacs e lembro de algumas situações em que ele não pôde exibir arquivos corretamente, mas less conseguiu.

    
por 15.01.2015 / 18:17