utf-8 seqüência no console

3

quando eu executo o comando "tree" no console, aqui está o que eu tenho:

.
├── Annexe\ 1\ -\ Sch31ma\ global\ de\ la\ base\ de\ donn31es.raw
...

O resultado é composto de seqüências utf-8, preciso obter a string em um formato legível para um relatório. Como posso converter essa coisa desagradável?

    
por vdegenne 13.05.2014 / 16:11

2 respostas

6

Você pode especificar qualquer conjunto de caracteres que deseja usar com a opção --charset .

   --charset charset
          Set the character set to use when outputting HTML and for line 
          drawing.

Existem também estes 2 interruptores que podem ajudar:

   -q     Print non-printable characters in filenames as question marks 
          instead of the default.

   -N     Print non-printable characters as is instead of as escaped octal 
          numbers.

Além disso, você pode aumentar a saída usando essas opções:

   -A     Turn on ANSI line graphics hack when printing the indentation 
          lines.

   -S     Turn on ASCII line graphics (useful when using Linux console mode 
          fonts). This option is now equivalent to '--charset=IBM437' and 
          may eventually be depreciated.
    
por 13.05.2014 / 16:23
2

Eu posso conseguir essa saída com:

LC_ALL=C tree -A

Você veria 31 se tree pensasse que 0303 e 0251 não eram caracteres válidos (ou sequência de caracteres em sua localidade).

No entanto, isso é válido em localidades UTF-8 nas quais 31 é é e iso-8859-1 ou iso-8859-15 (os dois conjuntos de caracteres de byte único comum por caractere comuns em países de língua francesa) onde 3 é Ã e 1 é © .

Então, aqui, isso sugere que você está em uma localidade onde o conjunto de caracteres é definido apenas para os primeiros valores de 128 bytes, como ASCII é como na localidade C.

Você poderia dizer a tree que seu conjunto de caracteres é UTF-8 ou iso-8859-15 e, em seguida, não traduziria esses 0303 bytes para 3 .

locale -a dirá se há uma localidade em seu sistema com um conjunto de caracteres UTF-8. Então você pode escolher um como fr_FR.UTF-8 :

LC_ALL=fr_FR.UTF-8 tree

Mas, então, se ele será exibido corretamente ou não, dependerá do que seu emulador de terminal entende. Se não estiver configurado para exibir caracteres UTF-8, não funcionará.

Se o emulador de terminal puder exibir iso-8859-1, você poderá fazer tree exibir UTF-8 e convertê-lo com iconv :

LC_ALL=fr_FR.UTF-8 tree | iconv -f UTF-8
    
por 13.05.2014 / 17:17