Migrando a UTF-8

De Wiki

Tabla de contenidos

[editar] Introducción

Esta pequeña guía parte de un Gentoo Linux funcionando y utilizando como charset de sistema ISO-8559-15. La idea es migrar a UTF-8 sin tener que reinstalar el sistema ni nada por el estilo.

[editar] Configurando el sistema

[editar] Kernel

Deberemos fijar File systems --> Native Language Support --> Default NLS Option (CONFIG_NLS_DEFAULT) a "utf8". Para ext3/xfs/reiserfs no deberemos hacer nada más, en el caso de vfat aunque podemos especificar como charset por defecto utf8, se recomienda en su lugar utilizar utf8=true como opciones de montaje.

[editar] Ficheros de configuración

Deberemos retocar varios ficheros:

  • /etc/locale.gen
  • /etc/rc.conf
  • /etc/make.conf
  • /etc/conf.d/consolefonts
  • /etc/conf.d/keymaps
  • /etc/env.d/02locale
  • /etc/profile

[editar] /etc/locale.gen

es_ES.UTF-8 UTF-8

Y a continuación ejecutamos el comando locale-gen y deberíamos tener un resultado similar a este:

* Generating 5 locales (this might take a while) with 1 jobs
*  (1/5) Generating en_US.ISO-8859-1 ...                                                                                            [ ok ]
*  (2/5) Generating en_US.UTF-8 ...                                                                                                 [ ok ]
*  (3/5) Generating es_ES.ISO-8859-15@euro ...                                                                                      [ ok ]
*  (4/5) Generating es_ES.ISO-8859-1 ...                                                                                            [ ok ]
*  (5/5) Generating es_ES.UTF-8 ...                                                                                                 [ ok ]

Fijaros en que tengais una línea similar a la 5/5 del ejemplo.

[editar] /etc/rc.conf

UNICODE="yes"

[editar] /etc/make.conf

Aquí simplemente añadimos "unicode" a la variable USE

[editar] /etc/conf.d/consolefonts

CONSOLEFONT="lat9u-16"

Esta es una de tantas fuentes con soporte UTF-8, es la que uso yo, pero es una simple sugerencia.

[editar] /etc/conf.d/keymaps

KEYMAP="es euro2""

[editar] /etc/env.d/02locale

LC_ALL="es_ES.utf8"
LANG="es_ES.utf8"
LANGUAGE="es_ES.utf8"

[editar] /etc/profile

En teoría no hay que colocar nada en este fichero, de hecho en uno de mis 2 equipos no tuve que añadir nada y me pilló sin problemas los valores fijados en /etc/env.d/02locale, pero en otro lo ignoró completamente, así que probad y en función de lo que pase colocais lo siguiente

LC_ALL="es_ES.utf8"
LANG="es_ES.utf8"
LANGUAGE="es_ES.utf8"
export LC_ALL
export LANG
export LANGUAGE

[editar] Aplicaciones

Lo primero que tenemos que hacer es recompilar los paquetes ya instalados y que esten afectados por el cambio de la variable USE que hemos realizado, lo hacemos ejecutando el siguiente comando

emerge -Nav world

[editar] Irssi

/set term_charset UTF-8
Nota: En mi caso tuve que convertir el archivo del tema del irssi de iso-8859-15 a UTF-8 utilizando iconv

[editar] screen

O bien ejecutamos screen con el parámetro -U o bien añadimos a /etc/screenrc la siguiente línea:

defutf8 on

[editar] Samba

Añadimos las siguientes líneas a la sección [global] del smb.conf

dos charset = UTF-8
unix charset = UTF-8
display charset = UTF-8

[editar] Arrancando en UTF-8

Una vez arrancado con el nuevo kernel y los cambios anteriormente descritos ya hechos, si todo ha ido bien, ejecutando el comando locale deberíamos obtener algo como esto:

LANG=es_ES.utf8
LC_CTYPE="es_ES.utf8"
LC_NUMERIC="es_ES.utf8"
LC_TIME="es_ES.utf8"
LC_COLLATE="es_ES.utf8"
LC_MONETARY="es_ES.utf8"
LC_MESSAGES="es_ES.utf8"
LC_PAPER="es_ES.utf8"
LC_NAME="es_ES.utf8"
LC_ADDRESS="es_ES.utf8"
LC_TELEPHONE="es_ES.utf8"
LC_MEASUREMENT="es_ES.utf8"
LC_IDENTIFICATION="es_ES.utf8"
LC_ALL=es_ES.utf8
Nota: Si el resultado no es el esperado, revisa la sección 2.2.7

[editar] Convirtiendo ficheros y nombres de fichero

Puede que veas mal algunas cosas, con caracteres extraños, para solucionar esto tenemos 2 herramientas, iconv y convmv, muy útiles para evitar este tipo de problemas.

[editar] iconv

iconv nos permite convertir el contenido del fichero de un charset a otro, en nuestro caso deberíamos usarlo del siguiente modo

iconv -f iso-8859-15 -t utf-8 fichero -o fichero.utf8
Atención: Si haces que coincida el fichero de entrada y el de salida, perderás los contenidos del fichero

Ejecutando esto obtendremos una versión en UTF-8 del fichero de entrada.

[editar] convmv

convmv nos permite convertir el nombre del fichero/directorio de un charset a otro, no su contenido. Su sintaxis es la siguiente:

convmv -f iso-8859-15 -t UTF-8 fichero/directorio

Al ejecutarlo, convmv nos mostrará como sería el resultado, y si lo resultamos adecuado añadimos la opción --notest y lo volvemos a ejecutar

Herramientas personales