Longitud de texto

Mide una cadena de varias formas útiles a la vez, incluidos emojis y hebreo.

Entrada
Caracteres
0
Puntos de código
0
Unidades UTF-16
0
Palabras
0
Líneas
0

Por qué "¿qué longitud tiene este texto?" tiene más de una respuesta

Suena como una pregunta trivial, pero la longitud de un fragmento de texto depende por completo de qué estés contando. Una persona cuenta los caracteres que ve. Una base de datos cuenta el almacenamiento que ocupa un valor. JavaScript cuenta algo distinto. Cuando estos números no coinciden —y a menudo no lo hacen con emojis, letras acentuadas y escrituras no latinas— una sola "longitud" induce a error. Esta herramienta muestra cinco medidas significativas una junto a otra para que elijas la que importa en tu caso.

Las cinco métricas explicadas

  • Caracteres (grafemas): lo que un humano percibe como un carácter. Un emoji de familia como 👨‍👩‍👧, o una letra con un acento combinante, cuenta como uno: es el recuento que coincide "a simple vista".
  • Puntos de código (code points): el número de valores escalares Unicode. Un único carácter visible puede estar formado por varios puntos de código unidos, así que este número suele ser mayor que el de grafemas.
  • Unidades UTF-16: el valor que JavaScript reporta desde la propiedad .length de una cadena. Los caracteres fuera del Plano Multilingüe Básico (la mayoría de los emojis) ocupan dos unidades UTF-16 cada uno.
  • Palabras: el número de tokens de tipo palabra, detectados de forma compatible con Unicode en lugar de dividir ingenuamente por espacios.
  • Líneas: el número de líneas, contando cada salto de línea.

Por qué los emojis y los acentos rompen el conteo ingenuo

El texto moderno se construye con Unicode, que representa muchos caracteres visibles como secuencias en lugar de unidades individuales. Un emoji de bandera son dos símbolos indicadores regionales. Un emoji de familia son varias figuras unidas por caracteres invisibles de "unión de ancho cero". Una é acentuada puede ser un único punto de código, o una e simple seguida de un acento combinante. Cada uno de ellos parece un carácter pero puede contar como dos, tres o más según la métrica. Por eso contar a mano, o fiarse de un solo número, provoca errores.

¿Qué recuento deberías usar?

  • Límites de caracteres que ve la gente (una biografía, un campo estilo tuit, una vista previa de SMS): usa Caracteres (grafemas), porque coincide con lo que cuenta el usuario.
  • Manejo de cadenas en JavaScript, indexado o troceado: usa unidades UTF-16, ya que es sobre lo que se basan .length y los índices de cadena.
  • Tamaños de columnas de base de datos: comprueba si tu columna se mide en caracteres o en bytes; muchas están limitadas por bytes, y los bytes UTF-8 difieren de nuevo de todos estos recuentos.
  • Recuentos de palabras o líneas para editores y legibilidad: usa las métricas de Palabras y Líneas.

Preguntas frecuentes

¿Qué recuento coincide con la longitud de cadena de JavaScript?
El valor de unidades UTF-16 coincide con la propiedad .length en bruto de JavaScript. Si tu código trocea o indexa cadenas, este es el número que rige su comportamiento.
¿Por qué un emoji cuenta como varios caracteres?
Muchos emojis están compuestos por varios puntos de código Unicode unidos. Como grafema (lo que ves) es un carácter, pero sus recuentos de puntos de código y UTF-16 son mayores, y por eso cada medida se muestra por separado.
¿Cuenta los espacios y saltos de línea finales?
Sí. Se cuenta cada carácter que pegas, incluidos los espacios iniciales y finales y los saltos de línea. Si los totales parecen más altos de lo esperado, revisa si hay espacios finales invisibles.
¿Se envía mi texto a algún sitio?
No. Todo el conteo ocurre en tu navegador. El texto que escribes o pegas nunca sale de tu dispositivo.
¿Qué es un grafema?
Un grafema, o "clúster de grafemas", es un carácter tal como lo percibe el usuario: la unidad más pequeña que un lector llamaría un solo carácter, aunque esté formada por varios puntos de código.
¿En qué se diferencian los bytes de estos recuentos?
Los bytes dependen de la codificación. En UTF-8, una letra ASCII es un byte, la mayoría de los caracteres acentuados y no latinos son dos o tres, y muchos emojis son cuatro. Ninguna de las cinco métricas de aquí es un recuento de bytes, así que para campos limitados por bytes conviene codificar primero a UTF-8.