secuencia utf-8 en la consola

secuencia utf-8 en la consola

cuando ejecuto el comando "árbol" en la consola, esto es lo que tengo:

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

El resultado está compuesto por secuencias utf-8. Necesito obtener la cadena en un formato legible por humanos para un informe. ¿Cómo puedo convertir esa cosa desagradable?

Respuesta1

Puede especificar cualquier conjunto de caracteres que desee utilizar con el --charsetinterruptor.

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

También existen estos 2 interruptores que pueden ayudar:

   -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.

También puedes aumentar la salida usando estos interruptores:

   -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.

Respuesta2

Puedo obtener ese resultado con:

LC_ALL=C tree -A

Verías \303\251si treepensaras que 0303 y 0251 no son caracteres válidos (o una secuencia de caracteres en tu localidad).

Sin embargo, eso es válido en configuraciones regionales UTF-8 donde \303\251es éy en iso-8859-1 o iso-8859-15 (los dos conjuntos de caracteres comunes de un solo byte por carácter que son comunes en los países de habla francesa) donde \303es Ãy \251es ©.

Entonces, aquí eso sugiere que estás en una configuración regional donde el juego de caracteres está definido solo para los primeros valores de 128 bytes como ASCII en la configuración regional C.

Se podría decir treeque su juego de caracteres es UTF-8 o iso-8859-15, y luego no traduciría esos 0303 bytes a \303.

locale -ale dirá si hay una configuración regional en su sistema con un juego de caracteres UTF-8. Entonces puedes elegir uno como fr_FR.UTF-8:

LC_ALL=fr_FR.UTF-8 tree

Pero entonces, si se mostrará correctamente o no dependerá de lo que entienda su emulador de terminal. Si no está configurado para mostrar caracteres UTF-8, no funcionará.

Si su emulador de terminal puede mostrar iso-8859-1, puede hacer que treese muestre UTF-8 y convertirlo con iconv:

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

información relacionada