sequência utf-8 no console

sequência utf-8 no console

quando executo o comando "tree" no console, eis o que tenho:

.
├── Annexe\ 1\ -\ Sch\303\251ma\ global\ de\ la\ base\ de\ donn\303\251es.raw
...

O resultado é composto por sequências utf-8. Preciso obter a string em um formato legível para um relatório. Como posso converter essa coisa desagradável?

Responder1

Você pode especificar qualquer conjunto de caracteres que deseja usar com o --charsetswitch.

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

Existem também estas 2 opções 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 estas 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.

Responder2

Posso obter essa saída com:

LC_ALL=C tree -A

Você veria \303\251se treepensasse 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 onde \303\251is ée em iso-8859-1 ou iso-8859-15 (os dois conjuntos de caracteres comuns de byte único por caractere que são comuns em países de língua francesa) onde \303is Ãe \251is ©.

Então, aqui isso sugere que você está em um código de idioma onde o conjunto de caracteres é definido apenas para os primeiros valores de 128 bytes, como ASCII é como no código de idioma C.

Você poderia dizer treeque seu conjunto de caracteres é UTF-8 ou iso-8859-15 e, então, ele não traduziria esses 0303 bytes para \303.

locale -adirá 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 o seu emulador de terminal entende. Se não estiver configurado para exibir caracteres UTF-8, não funcionará.

Se o seu emulador de terminal for capaz de exibir iso-8859-1, você poderá treeexibir UTF-8 e convertê-lo com iconv:

LC_ALL=fr_FR.UTF-8 tree | iconv -f UTF-8

informação relacionada