Utilizar UTF-8 en FreeBSD

Una de las cosas que echo en falta a la hora de realizar la instalación de FreeBSD es poder configurar UTF-8 en el instalador.

Al igual que muchos sistemas operativo de la familia UNIX, FreeBSD no viene configurado para utilizar la codificación de caracteres UTF-8 por defecto, sin embargo esta totalmente soportado y es facilmente configurable.

Para determinar el locale apropiado para nuestro lenguaje y localización es posible utilizar la herramienta locale, para obtener más información de su funcionamiento, con un simple man locale accedemos a su manual:

locale -a | grep -i utf

Mi FreeBSD 11.0 posee soporte para las siguientes configuraciones regionales (no las pongo todas, pongo la primera, la que voy a utilizar y la ultima):

usuari@freebsd:~% locale -a | grep -i utf
af_ZA.UTF-8
..
..
es_ES.UTF-8
..
..
zh_TW.UTF-8

En mi caso, voy a utilizar es_ES.UTF-8.

Para determinar cual es la configuración regional actual, ejecutar simplemente locale:

usuari@freebsd:~% locale

LANG=
LC_CTYPE="C"
LC_COLLATE="C"
LC_TIME="C"
LC_NUMERIC="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=

Se observa que se esta utilizando el locale C/POSIC, donde C y POSIC son aliases.

Por lo tanto, es necesario cambiar el locale a UTF-8, para poder visualizar correctamente los tildes y eñes. Para ello, editar el archivo /etc/login.conf:

root@freebsd:~# vi /etc/login.conf

:charset=UTF-8:\
:lang=es_ES.UTF-8:
Consejo
En la ultima variable no se debe escapar el salto de linea

Luego es necesario ejecutar cap_mkdb para regenerar la base de datos de capacidades de login:

root@freebsd:~# cap_mkdb /etc/login.conf

Ahora, vamos a configurar otro fichero que hace falta:

root@freebsd:~# vi /etc/profile

LANG=en_US.UTF-8;   export LANG
CHARSET=UTF-8;  export CHARSET

Finalmente, cerrar la sesión.

Luego de iniciar la sesión, es posible verificar la configuración regional nuevamente:

usuari@freebsd:~% locale

LANG=es_ES.UTF-8
LC_TYPE="es_ES.UTF-8"
LC_COLLATE="es_ES.UTF-8"
LC_TIME="es_ES.UTF-8"
LC_NUMERIC="es_ES.UTF-8"
LC_MONETARY="es_ES.UTF-8"
LC_MESSAGES="es_ES.UTF-8"
LC_ALL=

Notar como LC_COLLATE se mantiene en C.

A partir de este momento, se visualizaran correctamente los tildes y eñes en nombre de archivo, sesiones SSH y al escribir texto.

Referencia