Texto y código / Guías

Puntos de código Unicode, bytes UTF-8 y normalización

Un carácter visible, un punto de código Unicode y un byte almacenado son conceptos relacionados, pero no son la misma unidad de texto.

Tres capas de un texto

Una persona ve una secuencia de texto y, a veces, una marca que se combina con la letra anterior. Unicode asigna puntos de código a caracteres abstractos; una codificación como UTF-8 convierte esos puntos en bytes para almacenamiento o transmisión. Un carácter visible puede contener más de un punto de código, y un punto de código puede ocupar varios bytes UTF-8. Por ello, contar bytes no equivale necesariamente a contar letras ni caracteres percibidos por el usuario. La herramienta de texto a puntos de código muestra los valores Unicode de una cadena; texto a bytes UTF-8 muestra otra capa. Estas vistas ayudan a investigar diferencias, pero no son representaciones intercambiables sin conocer la codificación del receptor.

Dos maneras de escribir café

La palabra visible café puede terminar con el único punto de código U+00E9, LETRA LATINA MINÚSCULA E CON ACENTO AGUDO. Es la forma compuesta. También puede acabar con U+0065, LETRA LATINA MINÚSCULA E, seguido de U+0301, ACENTO AGUDO COMBINANTE. Esta forma añade un punto de código aunque la palabra se vea igual en muchos casos. En UTF-8, la versión compuesta tiene los bytes hexadecimales 63 61 66 C3 A9; la descompuesta tiene 63 61 66 65 CC 81. Son secuencias de bytes diferentes, así que una comparación exacta o un hash pueden diferir. NFC lleva este ejemplo a la secuencia compuesta; NFD, a la descompuesta. El conversor integrado muestra esos bytes en decimal: 99 97 102 195 169 para la forma compuesta y 99 97 102 101 204 129 para la descompuesta. Compara estos valores con la notación hexadecimal anterior.

Una palabra visible puede tener dos secuencias Unicode y dos secuencias de bytes.
  1. café: U+00E9 → termina en C3 A9
  2. café: U+0065 U+0301 → termina en 65 CC 81
  3. NFC ⇢ compuesto · NFD ⇢ descompuesto

Lo que hace la normalización

La normalización Unicode define formas de representar secuencias canónicamente equivalentes. NFC aplica composición canónica después de la descomposición, mientras NFD deja una secuencia canónica descompuesta. Resulta útil antes de comparar textos procedentes de teclados, archivos o sistemas diferentes. No traduce palabras, elimina acentos ni garantiza que todas las cadenas parecidas a la vista sean iguales. Algunos caracteres similares pertenecen a escrituras distintas o tienen significados diferentes. NFKC y NFKD, las formas de compatibilidad, pueden modificar además distinciones de presentación; elígelas solo si tu tarea admite esos cambios. Mantén una misma política de normalización allí donde compares, indexes o calcules hashes de valores, para evitar rutas diferentes con entradas casi idénticas.

Secuencia para diagnosticar un error

Si un nombre no coincide, conserva primero la entrada original. Examina sus puntos de código para saber si el acento es un carácter precompuesto o una letra base más una marca combinante. Revisa los bytes UTF-8 para comprobar la codificación que realmente viajará por una API o se guardará en un archivo. Normaliza copias a NFC o NFD, compara los puntos resultantes y usa el conversor inverso de bytes UTF-8 para confirmar que la secuencia es válida y se decodifica como esperabas. Al intercambiar archivos, registra explícitamente la codificación elegida en lugar de suponer el mismo valor predeterminado en cada programa. Un carácter de reemplazo suele indicar un problema de decodificación; normalizar una cadena ya mal decodificada no recupera los bytes originales.

Escoge la comparación correcta

Para integridad exacta de archivos, hashes y firmas, mandan los bytes: cambiar la normalización modifica la secuencia y también el resumen. Para búsquedas o detección de duplicados, un producto puede normalizar primero, pero debería explicar y probar esa regla. Mayúsculas, puntuación, espacios y ordenación lingüística son cuestiones separadas; NFC no las resuelve. No cambies silenciosamente la escritura del usuario al mostrarla o exportarla si el flujo de trabajo no lo requiere. Empieza en las herramientas siguientes con café e inspecciona sus bytes UTF-8. Después pega una versión escrita con e y acento combinante en las herramientas de puntos de código y normalización. La comparación revela exactamente dónde aparece una diferencia visualmente pequeña en el flujo de datos.

Prueba el convertidor

Examina los bytes UTF-8 de café y prueba luego una e con acento combinante.

UTF-8 serializa texto Unicode en bytes; ASCII usa uno por carácter y muchos otros caracteres usan de dos a cuatro. Convierte localmente en tu navegador.

Abrir el convertidor completo

Más guías

Guías de conversión

Explorar guías