Codificación (Encoding)
Para una introducción corta y sencilla acerca de los encoding y en especial sobre Unicode ver The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
PHP no soporta en forma nativa a Unicode (y al parecer va a ser así
hasta la version X) por lo que requiere que el editor de código que se
utilize (ej. Zend Studio, Eclipse, etc.) no cambie el encoding de los
archivos ni los cree utilizando utf8 por ejemplo, esto es muy normal que
suceda cuando el locale
del sistema operativo se encuentra en unicode
(utf8), aunque generalmente los editores tienen una opción para
leer/escribir los archivos respetando cierto encoding específico (en
nuestro caso iso88591
)
Postgres
A diferencia de las versiones anteriores a 8.3 Postgresql ya no permite crear una base con un encoding distinto al del cluster.
Toba
El instalador intenta crear una base en LATIN1
, si no es posible crearla
trata de usar ese encoding durante la conexión. De esta forma se evita
reiniciar el cluster de postgresql pero tiene la penalización de tener
que convertir la codificación de cada cadena desde y hacia el motor.
La forma de parametrizar la conexión es usando el parámetro encoding
en
el archivo de configuración instalacion/bases.ini
. Existen locales que
ni siquiera permiten esta conversión (algunos asiaticos), en
esos casos el instalador tira una excepción y es necesario cambiar el
locale del cluster.
Cambiar el encoding en Debian
En caso de que el editor de turno no soporte leer/escribir en iso8859-1
teniendo el ambiente en utf8
es necesario cambiar el locale
.
Para distribuciones linux-debian se necesita por un lado generar el
locale específico (en nuestro caso buscamos el es_AR.iso88591
tambien
llamado latin1
o simplemente es_AR
) y por otro seleccionarlo como
predeterminado.
Para realizar estos pasos se pueden a través de una interface gráfica o manualmente
- Guiado por interface: Se necesita tener instalado el paquete
localeconf
(sudo apt-get install localeconf
), el objetivo es reconfigurar el paquete que maneja los locale, en debian funciona con (sudo dpkg-reconfigure locales
) aunque en Ubuntu/Kubuntu este comando solo regenera los locales ya pertenecientes al sistema pero no deja elegir nuevos, para ello se necesita ejecutar (sudo dpkg-reconfigure localeconf
) y seleccionar la codificación como por defecto.
- Manualmente: Primero es necesario generar el locale para ello se
ejecuta (
sudo locale-gen es_AR
), luego se edita el archivo (/etc/enviroment
) y se ingresan las siguientes configuraciones:LANGUAGE="es_AR:es_ES:es:en_GB:en" LANG=es_AR
Una vez reiniciado el sistema se puede comprobar la validez del cambio
ejecutando el comando (locale
), tendría que presentar un listado
así, sin errores:
LANG=es_AR
LANGUAGE=es_AR:es_ES:es:en_GB:en
LC_CTYPE="es_AR"
LC_NUMERIC="es_AR"
LC_TIME="es_AR"
LC_COLLATE="es_AR"
LC_MONETARY="es_AR"
LC_MESSAGES="es_AR"
LC_PAPER="es_AR"
LC_NAME="es_AR"
LC_ADDRESS="es_AR"
LC_TELEPHONE="es_AR"
LC_MEASUREMENT="es_AR"
LC_IDENTIFICATION="es_AR"
LC_ALL=