Internacionalización: Unicode y UTF-8
De este artículo sobre internacionalización de Google:
El juego de carácteres (charset) es la tabla que traduce de un número a un "carácter" (o para ser más precisos un "codepoint"), y la codificación (encoding) es el algoritmo que hemos seguido para guardar ese número.
El consorcio Unicode se lanzó a la creación de un juego de carácteres que incluyese todos los carácteres usados en el mundo. De esta forma será posible tener páginas con mezcla en varios idiomas.
Ken Thompson y Rob Pike inventaron una codificación de tamaño variable llamada UTF-8. UTF-8 es idéntico a ASCII para todos los carácteres inferiores a 128, y usa uno o varios bytes extra (hasta un máximo de 4) cuando tiene que almacenar un número superior a 128. Cualquier texto ASCII en inglés es automáticamente un texto UTF-8 válido. Los textos europeos son en torno a un 2% más grandes que usando ISO-8859-15, ya que sólo los carácteres acentuados aumentan de tamaño. Los únicos que realmente salen perdiendo son aquellos que tenían un alfabeto pequeño (griego, ruso, ...) sin nada en común con el inglés, ya que antes podían codificar cada carácter con un 1 byte y ahora necesitan más. UTF-8 no usa ningún byte 0 en su codificación, y funciones como strcpy de C funcionan con textos UTF-8.
La recomendación es usar UTF-8 tanto en la base de datos como en la interfaz web.
NOTA: Al editar un texto en Windows como UTF-8 hay muchas posibilidades de que el editor añada un "BOM" (también llamado "signature"). El BOM era útil para UTF-16, pero para UTF-8 es totalmente irrelevante. Pero en Windows lo siguen escribiendo para poder distinguir texto codificado en UTF-8. Es necesario usar un editor que permita guardar en UTF-8 sin BOM, o las páginas tendrán tres bytes de más al principio de cada página web (EF BB BF). Esto puede ocasionar problemas por ejemplo con PHP.



