Unicode, Screen y Debian Jessie
Tengo una instalación OSMC funcionando en una Raspberry PI desde hace años, actualmente ejecutando Debian Jessie. Cuando conecto por SSH y listo un fichero con caracteres españoles en el nombre, veo algo de este estilo:
jcea@osmcpi:/tmp$ ls *mkv XXXXX sue??os (2010) [DUAL-subs-Opus].jcea.mkv
La ñ se pierde.
Cuando lanzo un procesado particular del fichero, veo esto:
jcea@osmcpi:/tmp$ codigo_secreto.py *mkv XXXXX sue\udcc3\udcb1os (2010) [DUAL-subs-Opus].jcea.mkv.meta 71%|███████████████████████████ | 113/159 [00:21<02:22, 3.09s/block]
Aquí la ñ se nos muestra como su codificación unicode UTF-8.
Lanzando lo anterior dentro de una sesión screen, aparece lo siguiente:
jcea@osmcpi:/tmp$ codigo_secreto.py *mkv XXXXX sue\udcc3\udcb1os (2010) [DUAL-subs-Opus].jcea.mkv.meta 69%|��������������������������� | 110/159 [00:08<06:58, 8.55s/block]
Bajo screen, perdemos incluso la barra de progreso.
Veamos la configuración de locale:
jcea@osmcpi:~$ locale locale: Cannot set LC_ALL to default locale: No such file or directory LANG=en_US.UTF-8 LANGUAGE= LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME=jcea.utf8 LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL=
Todo parece correcto, pero no funciona bien.
Tras varios experimentos, incluyendo lanzar screen como screen -U (que casi funciona, pero no del todo), la solución es la siguiente:
-
Añadimos export LC_ALL=en_US.UTF-8 a nuestro .bashrc.
-
Añadimos lo siguiente a nuestro fichero .screenrc:
defutf8 on utf8 on
Con esto ya sale lo que tiene que salir, tanto en la conexión SSH directa como bajo screen:
jcea@osmcpi:/tmp$ ls *mkv XXXXX sueños (2010) [DUAL-subs-Opus].jcea.mkv
jcea@osmcpi:/tmp$ codigo_secreto.py *mkv XXXXX sueños (2010) [DUAL-subs-Opus].jcea.mkv.meta 72%|███████████████████████████▏ | 114/159 [00:22<02:40, 3.56s/block]
jcea@osmcpi:/tmp$ locale LANG=en_US.UTF-8 LANGUAGE= LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL=en_US.UTF-8
Misión cumplida.