Todos los caracteres en ASCII pueden codificarse utilizando UTF-8 sin un aumento en el almacenamiento (ambos requieren un byte de almacenamiento).
UTF-8 tiene el beneficio adicional de soporte de caracteres más allá de los "caracteres ASCII". Si ese es el caso, ¿por qué alguna vez elegiremos la codificación ASCII sobre UTF-8?
¿Hay un caso de uso cuando elegiremos ASCII en lugar de UTF-8?
character-encoding
utf-8
ascii
Pacerier
fuente
fuente
Respuestas:
En algunos casos, puede acelerar el acceso a caracteres individuales. Imagine una cadena
str='ABC'
codificada en UTF8 y en ASCII (y suponiendo que el idioma / compilador / base de datos sepa sobre codificación)Para acceder al tercer carácter (
C
) desde esta cadena utilizando el operador de acceso a matriz que se presenta en muchos lenguajes de programación, haría algo comoc = str[2]
.Ahora, si la cadena está codificada en ASCII, todo lo que tenemos que hacer es obtener el tercer byte de la cadena.
Si, sin embargo, la cadena está codificada en UTF-8, primero debemos verificar si el primer carácter es un carácter de uno o dos bytes, entonces debemos realizar la misma verificación en el segundo carácter, y solo entonces podemos acceder al tercer carácter. La diferencia en el rendimiento será cuanto más grande, más larga es la cuerda.
Este es un problema, por ejemplo, en algunos motores de bases de datos, donde para encontrar el comienzo de una columna colocada 'después' de un VARCHAR codificado en UTF-8, la base de datos no solo necesita verificar cuántos caracteres hay en el campo VARCHAR, sino también cómo muchos bytes que usa cada uno de ellos.
fuente
Si va a usar solo el subconjunto US-ASCII (o ISO 646) de UTF-8, entonces no hay una ventaja real para uno u otro; de hecho, todo está codificado de forma idéntica.
Si va a ir más allá del conjunto de caracteres ASCII de EE. UU. Y usar (por ejemplo) caracteres con acentos, diéresis, etc., que se usan en los idiomas típicos de Europa occidental, entonces hay una diferencia: la mayoría de estos todavía pueden se codificará con un solo byte en ISO 8859, pero requerirá dos o más bytes cuando se codifique en UTF-8. También hay, por supuesto, desventajas: ISO 8859 requiere que use algunos medios fuera de banda para especificar la codificación que se está utilizando, y solo admite unode estos idiomas a la vez. Por ejemplo, puede codificar todos los caracteres del alfabeto cirílico (ruso, bielorruso, etc.) utilizando solo un byte cada uno, pero si necesita / desea mezclarlos con caracteres franceses o españoles (distintos de los de EE. UU.-ASCII) / ISO 646 subconjunto) no tienes suerte, tienes que cambiar completamente los conjuntos de caracteres para hacerlo.
ISO 8859 es realmente solo útil para alfabetos europeos. Para admitir la mayoría de los alfabetos utilizados en la mayoría de los alfabetos chinos, japoneses, coreanos, árabes, etc., debe usar una codificación completamente diferente. Algunos de estos (por ejemplo, Shift JIS para japonés) son un dolor absoluto con el que lidiar. Si hay alguna posibilidad de que alguna vez quieras apoyarlos, consideraría que vale la pena usar Unicode por si acaso.
fuente
ANSI puede ser muchas cosas, la mayoría son juegos de caracteres de 8 bits a este respecto (como la página de códigos 1252 en Windows).
Quizás estaba pensando en ASCII, que es de 7 bits y un subconjunto adecuado de UTF-8. Es decir, cualquier transmisión ASCII válida también es una transmisión UTF-8 válida.
Si estaba pensando en conjuntos de caracteres de 8 bits, una ventaja muy importante sería que todos los caracteres representables son exactamente de 8 bits, donde en UTF-8 pueden tener hasta 24 bits.
fuente
Sí, todavía hay algunos casos de uso en los que ASCII tiene sentido: formatos de archivo y protocolos de red . En particular, para usos donde:
Al utilizar ASCII como codificación, evita la complejidad de la codificación de varios bytes y conserva al menos cierta legibilidad humana.
Un par de ejemplos:
IDAT
significa "datos de imagen" yPLTE
significa "paleta".Por supuesto, debe tener cuidado de que los datos realmente no se presenten a los usuarios finales, porque si terminan siendo visibles (como sucedió en el caso de las URL), entonces los usuarios esperarán con razón que esos datos sean en un idioma que puedan leer.
fuente
En primer lugar: su título usa / d ANSI, mientras que en el texto se refiere a ASCII. Tenga en cuenta que ANSI no es igual a ASCII. ANSI incorpora el conjunto ASCII. Pero el conjunto ASCII está limitado a los primeros 128 valores numéricos (0 - 127).
Si todos sus datos están restringidos a ASCII (7 bits), no importa si usa UTF-8, ANSI o ASCII, ya que ANSI y UTF-8 incorporan el conjunto ASCII completo. En otras palabras: los valores numéricos 0 hasta 127 inclusive representan exactamente los mismos caracteres en ASCII, ANSI y UTF-8.
Si necesita caracteres fuera del conjunto ASCII, deberá elegir una codificación. Puede usar ANSI, pero luego se encuentra con los problemas de todas las páginas de códigos diferentes. Cree un archivo en la máquina A y léalo en la máquina B puede / producirá textos divertidos si estas máquinas están configuradas para usar páginas de códigos diferentes, simple porque el valor numérico nnn representa diferentes caracteres en estas páginas de códigos.
Este "infierno de la página de códigos" es la razón por la cual se definió el estándar Unicode . UTF-8 no es más que una codificación única de ese estándar, hay muchos más. UTF-16 es el más utilizado, ya que es la codificación nativa para Windows.
Entonces, si necesita admitir algo más allá de los 128 caracteres del conjunto ASCII, mi consejo es ir con UTF-8 . De esa manera, no importa y no tiene que preocuparse por la página de códigos que sus usuarios han configurado sus sistemas.
fuente