HOWTO Unicode-UTF-8

De Gentoo Linux Wiki

Este articulo es parte de las series de HOWTO.
Kernel & Hardware Red y Servicios Portage Relacionado con el Sistema Servidor X Juegos Misceláneos

Tabla de contenidos

[editar] Validez

Este HOWTO es una aproximación, pero aún no es correcto. Esperamos que pronto haya HOWTO's completos en inglés para traducirlos al castellano.

[editar] ¿Por qué Unicode?

Tomado de What Is Unicode:

Fundamentalmente las computadoras solo tratan con números. Representan letras y demás caracteres asignando un número a cada una. Antes de que fuera inventado Unicode, existían cientos de diferentes sistemas de codificación para la asignación de estos números. Ninguna codificación podía contener suficientes caracteres: por ejemplo, solo la Unión Europea requiere varias codificaciones para cubrir todos sus idiomas. Incluso para una sola lengua como el inglés no existe codificación adecuada para cubrir todas las letras, puntuación, y símbolos técnicos de uso común. Estos sistemas de codificación también están en conflicto unos con otros. Es decir, dos codificaciones pueden usar el mismo número para dos caracteres diferentes, o usar diferentes números para el mismo caracter. Cualquiera que sea la función de una computadora necesita diferentes codificaciones; ya que los datos pasan entre diferentes codificaciones o plataformas, siempre corren el riesgo de corromperse.

¡Unicode permite cambiar todo eso!

Unicode provee un único numero para cada caracter, no importa la plataforma, no importa el idioma.

Debes notar que el texto anterior es un poco ambiguo. Para clarificar: Unicode es un numero <-> character mapping definition pero no es una codificación. La codificación real de los numeros en bits vienen en diversos sabores incluyendo UTF-8, UTF-EBCDIC, UTF-16, UTF-16BE, UTF-32, UTF-32BE, UTF-32LE, UCS-2 Y UCS-4, también, decir que unicode hace obsoleta la codificación es una exageración. Sin embargo estas codificaciones no entran en conflicto entre ellas.

[editar] Kernel

Para activar unicode en el kernel pon lo siguiente:

Código: Kernel
File systems --->
Native Languaje Support --->
(utf8) Default NLS Option
<*>   NLS UTF8

Ahora los nombres de sus ficheros serán codificados en utf8 por defecto, claro, después de que recompile su núcleo.

[editar] Bugs del Kernel

Observa por favor que hay un bug en el kernel de linux (todas las versiones arriba de la 2.6.10 al tiempo de escribir esto), que afecta las locales en UTF-8 cuando se usan las dead keys (como Czech, Polish, Slovak, Spanish...). El kernel de linux no soporta unicode para las dead keys.

Para más detalles y un posible parche no oficial, da un vistazo a este hilo, en donde Vojtech Pavlik de SUSE lo posteo. Aquí también puedes encontrar un parche para la rama 2.4 (por Radovan Garabik). también están disponibles otros parches que tratan de solucionar este problema. Desafortunadamente ninguno de ellos ha sido agregado a la rama oficial del kernel. Usalos bajo tu propio riesgo

[editar] Asignando las locales

Fija tu local en /etc/env.d/02locale:

Archivo: /etc/env.d/02locale
 LANG="es_ES.utf8"
 LANGUAGE="es_ES.utf8"
 LC_ALL="es_ES.utf8"

Puedes encontrar tu local correspondiente con:

Código: Consola
locale -a

[editar] Configuración del Teclado

En /etc/rc.conf pon:

UNICODE="yes"

Remplaza es con tu disposición de teclado /etc/conf.d/keymaps:

KEYMAP="-u es"

[editar] Configuración de la Consola

En ~/.bashrc agrega:

Archivo: ~/.bashrc
 if [ $TERM = "linux" ]
 then
   unicode_start
 fi

Para iniciar la consola en modo unicode (usa "unicode_start foo_font" para poner una fuente personalizada)

Alternativamente puedes usar este init.d script para poner todas las consolas en modo unicode al arrancar

Archivo: /etc/init.d/unicode
 #!/sbin/runscript
 conf=/etc/env.d/02locale
 
 # Using devfs?
 if [ -e /dev/.devfsd ] || [ -e /dev/.udev -a -d /dev/vc ]; then
   device=/dev/vc/
 else
 
   device=/dev/tty
 fi
 
 depend() {
         need localmount
         after keymaps
         before consolefont
 }
 
 checkconfig() {
 
   if [ -r ${conf} ]; then
           . ${conf}
           encoding=
           [ -n "${LC_ALL}" ]      && encoding=${LC_ALL#*.}   && return 0
           [ -n "${LC_MESSAGES}" ] && encoding=${LC_MESSAGES#*. } && return 0
           [ -n "${LANG}" ]        && encoding=${LANG#*.}   && return 0
   fi
   eend 1 "Locale is not configured, Please fix ${conf}"
   return 1
 }
 
 start() {
         ebegin "setting consoles to UTF-8"
         checkconfig
         if [ "${encoding}" = "UTF-8" -o "${encoding}" = "utf-8 " ]; then
                 dumpkeys | loadkeys --unicode
                 for ((i=1; i <= "${RC_TTY_NUMBER}"; i++)); do
                         echo -ne "\033%G" > ${device}${i}
                 done
                 eend 0
         else
                 eend 1 "UTF-8 is not required"
         fi
 }

[editar] Aplicaciones

[editar] Emuladores de Terminal

[editar] xterm

xterm corre en modo unicode cuando es lanzada así:

xterm -u8 ó

uxterm

[editar] urxvt

urxvt del paquete rxvt-unicode siempre esta corriendo en modo unicode.

[editar] GNU Screen

GNU Screen debe ser invocado con el parámetro -U.

Si lo estas usando como login shell tendrás que escribir un wrapper que llame a screen con la opción -U y que estas opciones sean cargadas cuando GNU Screen sea usado como un login shell.

Archivo: Wrapper
#!/bin/sh
/usr/bin/screen -xRR -U

Para las personas que lo usen con irssi u otros, un simple alias será suficiente:

Archivo: ~/.bashrc
 alias screen="screen -U"

[editar] Editores

[editar] Vim

Agrega esto a tu .vimrc para hacer que vim use una terminal utf-8:

set tenc=utf-8

En adición a esto:

set enc=utf-8

que fuerza a vim a usar internamente unicode para escribir los archivos.

[editar] Nano

Versiones de nano anteriores a 1.3.6 no pueden manejar utf8 apropiadamente.

Código: Consola
 # echo "=app-editors/nano-1.3.6 ~x86" >> /etc/portage/package.keywords
 # emerge -uDav nano

[editar] Edición

[editar] Latex

Agregar soporte unicode para LaTeX

Código: Consola
 # echo "dev-tex/latex-unicode ~x86" >> /etc/portage/package.keywords
 # emerge dev-tex/latex-unicode

[editar] Correo

[editar] Mutt

Mutt debe trabajar sin problemas en una consola unicode. Pero si quieres usar pretty-printing necesitas un pequeño truco ya que a2ps no tiene soporte utf-8. Entonces emerge recode y a2ps:

Código: Consola
 # emerge recode a2ps

y pon esto en tu .muttrc:

set print_command="recode UTF-8..Latin-1 | a2ps -1 --portrait --borders=no -X latin1 \ --pretty-print=mail --strip 1 --highlight-level=heavy -P printername"

[editar] Shells

[editar] bash

Bash esta preparado para usar unicode desde la versión 3, usando readline version 5. Ambos se encuentran en portage pero aún estan enmascarados (~arch):

Código: Consola
 # echo ">=app-shells/bash-3.0-r7 ~x86" >> /etc/portage/package.keywords
 # echo ">=sys-libs/readline-5.0-r1 ~x86" >> /etc/portage/package.keywords
 # emerge bash sys-libs/readline
 # revdep-rebuild --soname libreadline.so.4
 # rm /lib/libreadline.so.4*

Asegurate de saber lo que haces en el último paso (ve la información al final del emerge de readline)

También necesitas tener el paquete gentoolkit instalado, este contiene la utilidad revdep-rebuild.

[editar] zsh

Zsh aun no implementa el soporte unicode. Aún así funcionará siempre y cuando no uses Backspace en los caracteres unicode. (Ya que solo borra parte del caracter unico lo cual confunde a zsh sobre la posición del cursor).

[editar] X

[editar] fluxbox

Fluxbox se demora bastante al cargar mientras se está utilizando UTF-8. Para solucionar este problema, se puede optar por utilizar este simple alias:

Archivo: ~/.bashrc
alias startx="LC_ALL='C' startx"

y volviéndo a establecer la local UTF-8 para ser cargada al arranque de Fluxbox:

Archivo: ~/.fluxbox/startup
export LC_ALL="es_ES.utf8"

Tambien puedes probar a recompilar Fluxbox utilizando la USE "disablexmb":

echo "x11-wm/fluxbox disablexmb" >> /etc/portage/package.use
emerge -av fluxbox

(en mi caso, xorg-x11-6.8.2 + fluxbox-0.9.12-r1 funcionan perfectamente sin tener que utilizar esta USE)


Pequeña observación:

cuando utilizo la USE disablexmb, fluxbox suele colgarse al intentar ejecutar aplicaciones X (xedit o cualquiera en Fluxbox)


Tambien puedes utilizar este patch:

Archivo: flux-utf8-slow.patch
diff -ur fluxbox-0.9.11.orig/src/FbTk/Font.cc fluxbox-0.9.11/src/FbTk/Font.cc
--- fluxbox-0.9.11.orig/src/FbTk/Font.cc        2004-11-19 14:01:39.000000000 +0200
+++ fluxbox-0.9.11/src/FbTk/Font.cc     2004-12-24 19:19:46.015735856 +0200
@@ -293,7 +293,7 @@
     // create the right font implementation
     // antialias is prio 1
 #ifdef USE_XFT
-    if (antialias) {
+    if (antialias || m_utf8mode) {
         m_fontimp.reset(new XftFontImp(0, m_utf8mode));
     }
 #endif //USE_XFT

[editar] Enlaces

[editar] Créditos

  • Articulo original por Björn Michaelsen
  • Traducción al Español por navegante
Herramientas personales