En el tiempo libre que me queda entre proyectos, aprovecho para seguir realizando algunas mejoras a mi FreeBSD 10.1. En este caso, tenía pendiente configurar adecuadamente la codificación de caracteres en UTF-8, para visualizar adecuadamente los acentos (tildes en realidad) y las letras eñe (ñ, Ñ).
Al igual que muchos sistemas operativos de la familia UNIX, FreeBSD no viene configurado para utilizar la codificación de caracteres UTF-8 por defecto. Sin embargo, FreeBSD afortunadamente soporta UTF-8, y es fácilmente configurable.
Para determinar el locale apropiado para nuestro lenguaje y localización, es posible utilizar la herramienta locale
(man locale
):
locale -a | grep -i utf
Mi FreeBSD 10.1 posee soporte para las siguientes configuraciones regionales:
emi@hal9000:~ % locale -a | grep -i utf af_ZA.UTF-8 am_ET.UTF-8 be_BY.UTF-8 bg_BG.UTF-8 ca_AD.UTF-8 ca_ES.UTF-8 ca_FR.UTF-8 ca_IT.UTF-8 cs_CZ.UTF-8 da_DK.UTF-8 de_AT.UTF-8 de_CH.UTF-8 de_DE.UTF-8 el_GR.UTF-8 en_AU.UTF-8 en_CA.UTF-8 en_GB.UTF-8 en_IE.UTF-8 en_NZ.UTF-8 en_US.UTF-8 es_ES.UTF-8 et_EE.UTF-8 eu_ES.UTF-8 fi_FI.UTF-8 fr_BE.UTF-8 fr_CA.UTF-8 fr_CH.UTF-8 fr_FR.UTF-8 he_IL.UTF-8 hr_HR.UTF-8 hu_HU.UTF-8 hy_AM.UTF-8 is_IS.UTF-8 it_CH.UTF-8 it_IT.UTF-8 ja_JP.UTF-8 kk_KZ.UTF-8 ko_KR.UTF-8 lt_LT.UTF-8 lv_LV.UTF-8 mn_MN.UTF-8 nb_NO.UTF-8 nl_BE.UTF-8 nl_NL.UTF-8 nn_NO.UTF-8 no_NO.UTF-8 pl_PL.UTF-8 pt_BR.UTF-8 pt_PT.UTF-8 ro_RO.UTF-8 ru_RU.UTF-8 sk_SK.UTF-8 sl_SI.UTF-8 sr_YU.UTF-8 sv_SE.UTF-8 tr_TR.UTF-8 uk_UA.UTF-8 zh_CN.UTF-8 zh_HK.UTF-8 zh_TW.UTF-8
Entonces podría utilizar, por ejemplo, en_US.UTF-8
o es_ES.UTF-8
.
Para determinar cuál es la configuración regional actual, ejecutar simplemente locale
:
emi@hal9000:~ % 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 está utilizando el locale C/POSIX (C y POSIX 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@hal9000:/usr/home/emi # nano /etc/login.conf
Configurar correctamente los valores por defecto (luego de default:
) de las variables charset
y lang
:
:charset=UTF-8:\ :lang=en_US.UTF-8:
(Notar que en la última variable no se debe escapar el salto de línea.)
Además, se recomienda que LC_COLLATE
(cómo se intercalan los bytes en caracteres multi-byte) se mantenga por defecto en C, debido a que algunos programas todavía requieren mantener el ordenamiento ASCII para funcionar correctamente. Para ello, agregar dicha variable dentro de la configuración del entorno (setenv
). Cambiar:
:setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\
Por:
:setenv=MAIL=/var/mail/$,BLOCKSIZE=K,LC_COLLATE=C:\
Luego es necesario ejecutar cap_mkdb
para regenerar la base de datos de capacidades de login:
root@hal9000:/usr/home/emi # cap_mkdb /etc/login.conf
Finalmente, cerrar sesión.
Luego de iniciar sesión, es posible verificar la configuración regional nuevamente:
emi@hal9000:~ % locale LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" LC_COLLATE=C LC_TIME="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_ALL=
Notar cómo LC_COLLATE
se mantiene en C.
A partir de este momento se visualizarán correctamente los tildes y eñes en nombres de archivo, sesiones SSH y al escribir texto.
Referencias
C/POSIX locale, Narrative Cultural Specification