Contar caracteres: SMS, X, títulos de YouTube y emojis

Actualizado:

«¿Cuántos caracteres tiene esto?» tiene más de una respuesta, porque cada sistema cuenta una cosa distinta: lo que ves, los puntos de código que hay detrás o los bytes que ocupa al enviarse. Una mano que saluda 👋 es un carácter en pantalla y dos para JavaScript; un SMS con una sola letra acentuada admite 70 caracteres en lugar de 160. Esta guía explica las reglas de las que salen esas cuentas.

Qué es un «carácter»

Lo que ves como un carácter, un grafema, pueden ser varios puntos de código Unicode, y cada punto de código, una o dos unidades UTF-16. La propiedad length de JavaScript cuenta unidades, así que 👋 mide 2. El emoji de familia 👨‍👩‍👧 es un grafema formado por cinco puntos de código (hombre, unión, mujer, unión, niña) y ocho unidades. Incluso «café» puede tener cuatro puntos de código o cinco, con la tilde guardada aparte; la mayoría de los sistemas lo normalizan a cuatro.

Un buen contador cuenta grafemas, lo que ve quien lee. Separar el texto en puntos de código o usar Intl.Segmenter, como explica MDN, lo consigue; length por sí solo, no.

Contador de caracteres

SMS: 160, 70, 153 y 67

Un SMS lleva como máximo 140 bytes de texto. Con el alfabeto GSM, de 7 bits por carácter, son 160 caracteres; en cuanto un carácter queda fuera, todo el mensaje pasa a UCS-2, de 2 bytes por carácter, y caben 70. Algunos caracteres GSM ocupan dos plazas porque necesitan un escape: € [ ] { } ^ ~ \ |.

Los textos más largos se envían en partes, y cada parte gasta 6 bytes en una cabecera que indica al teléfono cómo unirlas, así que quedan 153 caracteres GSM o 67 caracteres UCS-2 por parte.

MensajeCabe en un SMSPor parte si se divide
Solo caracteres GSM160153
Al menos un carácter distinto (un emoji, ó, ã, ê)7067

Así, 161 caracteres GSM necesitan 2 partes y 307 necesitan 3; con un emoji, 71 caracteres ya necesitan 2. Las tildes del español son la trampa habitual: à, è, é, ì, ò y ù están en el alfabeto GSM, pero á, ó y ú no, así que «canción» hace que el mensaje pase a 70.

Límites en X, YouTube y Google

DóndeLímiteCómo cuenta
Publicación en X280Alfabeto latino, griego, cirílico, árabe y la mayoría de los demás 1; chino, japonés y coreano 2; cada emoji 2, incluso una familia; cada enlace 23
Título de un vídeo de YouTube100Caracteres
Descripción de YouTube5000Caracteres
Meta descripción para GoogleSin límiteGoogle corta el fragmento para que quepa en la pantalla y a menudo escribe el suyo a partir de la página

En X, una publicación en alfabeto latino puede usar los 280 caracteres, pero una en japonés solo 140, y un enlace cuesta siempre 23 aunque sea muy largo.

Por qué dos contadores dan cifras distintas

Preguntas frecuentes

¿Por qué mi SMS bajó a 70 caracteres?

Porque contiene un carácter que no está en el alfabeto GSM: un emoji, unas comillas tipográficas o una tilde como la de ó. Todo el mensaje se envía entonces en UCS-2, donde caben 70 caracteres, o 67 por parte.

¿Por qué € cuenta como dos en un SMS?

Está en la tabla de extensión GSM, a la que se llega con un carácter de escape, así que ocupa dos de las 160 plazas. Lo mismo ocurre con [ ] { } ^ ~ \ y |.

¿Cuentan los espacios?

En un SMS, una publicación en X y un título de YouTube, sí: un espacio es un carácter como cualquier otro. El contador de caracteres muestra la cuenta con y sin ellos.

¿Qué longitud debe tener una meta descripción?

Google no fija un límite, corta el fragmento para que quepa en la pantalla y a menudo escribe el suyo a partir de la página. Pon primero las palabras importantes, para que no se pierdan en el corte.

¿Por qué JavaScript dice 2 para un solo emoji?

Porque length cuenta unidades UTF-16, y la mayoría de los emojis ocupan dos. Cuenta grafemas, por ejemplo con Intl.Segmenter, y 👋 da 1.

Referencias

  1. 3GPP TS 23.040 — Technical realization of the Short Message Service (SMS)
  2. 3GPP TS 23.038 — Alphabets and language-specific information
  3. X Developer Platform — Counting characters
  4. YouTube Help — Edit video settings
  5. Google Search Central — Control your snippets in search results
  6. MDN Web Docs — String: length

Guías relacionadas