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

Using Localization

C/POSIX locale, Narrative Cultural Specification


Tal vez pueda interesarte


Compartí este artículo