Ver Mensaje Individual
  #8 (permalink)  
Antiguo 30/08/2010, 21:42
Avatar de zerokilled
zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: ¿Á o Á en UTF-8?

en vista de las ultimas respuestas considero que no es necesario redactar las lineas que iba a exponer, lo que si considero es que todos deberian leer ambos articulos. el articulo de joelonsoftware se basa mas en la teoria el cual aplica a todas las areas de desarrollo, y el articulo de phpwatch.org en algo de teoria pero con enfoque hacias las aplicaciones. gracias pablo y abimael por tan buenos articulos. sin embargo, me es necesario mencionar algun detalle importante en torno al tema de inicio y como complemento de ambos articulos.
  • todos sabemos el proposito de las entidades, representar caracteres "especiales". sin embargo, podemos pasar de alto su uso cuando el conjunto de caracteres (charset) a utilizar puede representar dicho caracter, con la unica excepcion de ciertos caracteres que tienen un significado especial en HTML.
    justamente es aqui donde tengo mis desacuerdo cuando se cita que utf-8 es mejor que ISO-8859-1 (Latin-1) porque utf-8 puede representar caracteres como la eñe y vocales acentuadas. lo cierto es que ese no es el factor por el cual utf-8 sea mejor, porque si miramos la tabla ISO-8859-1 veremos que los caracteres antes mencionados estan presentes, lo cual es perfectamente valido utilizar Latin-1 sin tener que recurrir a las entidades. lo que hace utf-8 tener mayor ventaja frente Latin-1 es que el contenido puede contener varios idiomas bajo un solo conjunto de caracteres.
  • tecnicamente UTF no es un conjunto de caracteres sino un algoritmo para codificar la tabla Unicode usando como base una cierta longitud de bytes para los caracteres. no obstante, con cualquiera de las variantes de UTF es posible representar cualquier caracter de la tabla Unicode. cuando el caracter no se puede representar en esa base de bytes se utilizan mas bytes. por ejemplo, utf-8 utiliza 8-bits, equivalente a un byte, para representar los caracteres por debajo del code-point 0x7F.
  • exactamente, ¿por qué en ocaciones tenemos la representacion incorrecta de los caracteres? en resumen se debe a la mezcla de codificaciones o la identificacion incorrecta de ésta. lo que sucede en el trasfondo es lo siguiente. cada codificacion utiliza un valor unico para cada caracter dentro de su conjunto. en algunos casos, un caracter puede representar el mismo valor en diferentes codifaciones. por ejemplo, la letra A tiene valor 0x41 (65 decimal) en Unicode, Latin-1, Windows-1252, y en otras series de ISO-8859. en su momento, se hicieron asi como proposito de compatibilidad con otras codificaciones como ASCII. al mismo tiempo, cada codificacion se basa en una serie de normas. por ejemplo, el antes mencionado, utf-8 utiliza los primeros 128 valores para los caracteres ASCII y estos se representan en un solo byte. a partir de las pociones 0x80 hasta 0x7ff utiliza dos bytes. dentro de este rango es donde se encuentra los caracteres como eñe y vocales acentuadas -por mencionar algunos-. comparado con Latin-1, estos mismos caracteres representan un solo byte. a continuacion una presentacion de sus valores.
    Código:
    caracter   Latin-1   utf-8       utf-16LE
    Á          0xC1      0xC3 0x81   0xC1 0x00
    É          0xC9      0xC3 0x89   0xC9 0x00
    Í          0xCD      0xC3 0x8D   0xCD 0x00
    Ó          0xD3      0xC3 0x93   0xD3 0x00
    Ú          0xDA      0xC3 0x9A   0xDA 0x00
    Ñ          0xD1      0xC3 0x91   0xD1 0x00
    á          0xE1      0xC3 0xA1   0xE1 0x00
    é          0xE9      0xC3 0xA9   0xE9 0x00
    í          0xED      0xC3 0xAD   0xED 0x00
    ó          0xF3      0xC3 0xB3   0xF3 0x00
    ú          0xFA      0xC3 0xBA   0xFA 0x00
    ñ          0xF1      0xC3 0xB1   0xF1 0x00
    
    ¿que sucede si indicamos la codificacion incorrecta? la aplicacion utilizara la codificacion indicada (incorrectamente) y de acuerdo sus normas o algoritmo lee una serie de bytes y lo parea con un caracter de acuerdo a su valor. por ejemplo, si codificamos el contenido en utf-8 pero le indicamos a la aplicacion que utilice Latin-1 para decodificarlo, este ultimo tomara byte por byte y devuelve un caracter de acuerdo a su valor. de ahi es que vemos una secuencia como ÃÉÃÓÚÑáéÃ*óúñ. de forma similar sucede si codificamos el contenido en Latin-1 pero indicamos decodificar con utf-8. en este caso vemos simples cuadros u otros simbolos porque utf-8 utiliza un algoritmo para determinar cuando un caracter se representa en dos o mas bytes. en ese caso los valores de Latin-1 no figuran correctamente el algoritmo de utf-8.

conclusiones: es importante siempre mantenerse en el uso de un solo conjunto de caracter, y en el caso de la programacion utilizar las funciones adecuadas para manipular el contenido segun su codificacion. en mi opinion, el concepto de un charset mejor que el otro no existe. mas bien cada uno cumple con sus propositos con sus ventajas y desventajas, por tanto el mejor charset es el que mejor le funcione a cada autor segun sea la necesidad del proyecto.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 03/09/2010 a las 23:29 Razón: agregar utf16LE a la tabla