Cuatro formas de contar el mismo texto

Los ordenadores guardan el texto como números, y hay más de una forma razonable de contarlos. Las apps y los juegos eligen una, normalmente sin decírtelo, así que el mismo nombre puede caber en un sitio y ser «demasiado largo» en otro.

El emoji de familia medido de cuatro formas: 1 carácter visible, 5 puntos de código, 8 unidades UTF-16 y 18 bytes UTF-8.
El mismo texto, cuatro longitudes distintas.
Las cuatro medidas
MedidaQué cuenta
Grafemas (caracteres que ves)Lo que un lector percibe como un solo carácter, aunque esté formado por varias piezas.
Puntos de códigoCada carácter Unicode por separado, incluidas las uniones invisibles y las marcas combinables.
unidades UTF-16La unidad de almacenamiento que usan JavaScript, Java, Windows y muchas apps. Los caracteres por encima de U+FFFF ocupan dos.
Bytes UTF-8El tamaño al guardarse o enviarse como UTF-8, la codificación habitual de la web: de 1 a 4 bytes por punto de código.

Ejemplos probados

Cada número de abajo lo generó código, no se escribió a mano: los grafemas con Intl.Segmenter en Node.js 22.22.2 (ICU 78.2, Unicode 17.0) y los demás recuentos a partir del texto codificado, contrastados en Python. Distintas versiones de software pueden discrepar a veces sobre los límites de grafemas en escrituras complejas.

Diez textos, cuatro longitudes cada uno
TextoQué esGrafemasPuntos de códigoUTF-16Bytes UTF-8
LunaLetras latinas simples4444
Zoëë como un solo carácter (U+00EB)3334
Zoëe + diéresis combinable (U+0308)3445
𝓛𝓾𝓷𝓪Letras cursivas en negrita (Mathematical Alphanumeric Symbols)44816
꧁Luna꧂Nombre en un marco de puntuación javanesa66610
Luna🔥Nombre + un emoji5568
👍🏽Emoji + modificador de tono de piel1248
🇯🇵Bandera (dos letras indicadoras regionales)1248
👨‍👩‍👧Emoji de familia (tres emojis unidos por uniones de ancho cero)15818
ليلىLetras árabes4448

Grafemas: lo que realmente ves

El Unicode Standard Annex #29 define los clústeres de grafemas extendidos: los caracteres tal como los percibe el usuario. Una letra con un acento combinable, un emoji con tono de piel, una bandera formada por dos letras indicadoras regionales y un emoji de familia unido con uniones de ancho cero son, cada uno, un grafema.

Dentro del emoji de familia

Un carácter visible, cinco puntos de código
Punto de códigoNombreUTF-16Bytes
U+1F468Hombre24
U+200DZero Width Joiner13
U+1F469Mujer24
U+200DZero Width Joiner13
U+1F467Niña24

Puntos de código: los números de Unicode

Un punto de código es el número de un carácter en Unicode, escrito como U+ seguido de dígitos hexadecimales. «ë» se puede escribir como un solo punto de código (U+00EB) o como «e» más U+0308 COMBINING DIAERESIS. Ambos se ven iguales; por eso dos nombres que parecen idénticos pueden contarse de forma distinta y por eso algunas apps normalizan antes el texto.

UTF-16: por qué las letras con estilo cuentan doble

UTF-16 guarda los puntos de código hasta U+FFFF en una unidad de 16 bits y todo lo que está por encima en dos (un par subrogado). Las letras en negrita, cursiva y góticas de NameFonts vienen sobre todo del bloque Mathematical Alphanumeric Symbols (U+1D400–U+1D7FF), y la mayoría de los emojis también están por encima de U+FFFF, así que cada uno ocupa dos unidades. Los nueve emojis nuevos de Unicode 18.0 no son una excepción. En JavaScript, "𝓛".length es 2.

UTF-8: los bytes en disco y en la red

UTF-8 usa 1 byte para las letras ASCII, 2 bytes para la mayoría de las letras latinas con tilde, el griego, el cirílico, el árabe y el hebreo, 3 bytes para la mayoría de los demás caracteres hasta U+FFFF (incluidos los CJK y muchos símbolos) y 4 bytes por encima. Los límites de bases de datos y redes suelen expresarse en bytes.

¿Cuál usa mi app?

No indicamos límites para apps o juegos concretos: rara vez están documentados y cambian. Con una prueba rápida puedes averiguar qué unidad cuenta una app:

  1. Escribe un nombre normal hasta el límite y anota el número.
  2. Sustituye una letra por una letra con estilo (por ejemplo, del generador de cursiva).
  3. Si el nombre cuenta ahora uno más, la app cuenta unidades UTF-16; si el recuento no cambia, cuenta grafemas o puntos de código.
  4. Prueba «Zoë» escrito de las dos formas (de la tabla de arriba) para distinguir grafemas de puntos de código.

Preguntas frecuentes

¿Por qué mi nombre cuenta más caracteres de los que veo?

Algunos caracteres visibles están formados por varios puntos de código, y los caracteres por encima de U+FFFF usan dos unidades UTF-16. Las apps que cuentan puntos de código o unidades UTF-16 dan un número mayor que lo que ves.

¿Un grafema es lo mismo que una letra?

No siempre. Un grafema es lo que un lector percibe como un solo carácter. En texto latino suele ser una letra, pero una secuencia de emojis o una letra con marcas combinables también es un grafema.

Fuentes

Siguiente paso

Pega tu propio nombre para ver los cuatro recuentos, carácter a carácter.