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 --charset
interruptor.
--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\251
si tree
pensaras 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\251
es é
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 \303
es Ã
y \251
es ©
.
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 tree
que su juego de caracteres es UTF-8 o iso-8859-15, y luego no traduciría esos 0303 bytes a \303
.
locale -a
le 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 tree
se muestre UTF-8 y convertirlo con iconv
:
LC_ALL=fr_FR.UTF-8 tree | iconv -f UTF-8