HOWTO Unicode-UTF-8
De Gentoo Linux Wiki
| 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
- Documentación UTF-8 oficial de Gentoo, Ingles
- Documentación UTF-8 oficial de Gentoo, Español
- Unicode-HOWTO de TLDP
- Descripción detallada del uso de Unicode en Linux
[editar] Créditos
- Articulo original por Björn Michaelsen
- Traducción al Español por navegante
