Contar caracteres: SMS, X, títulos de YouTube y emojis
«¿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.
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.
| Mensaje | Cabe en un SMS | Por parte si se divide |
|---|---|---|
| Solo caracteres GSM | 160 | 153 |
| Al menos un carácter distinto (un emoji, ó, ã, ê) | 70 | 67 |
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ónde | Límite | Cómo cuenta |
|---|---|---|
| Publicación en X | 280 | Alfabeto 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 YouTube | 100 | Caracteres |
| Descripción de YouTube | 5000 | Caracteres |
| Meta descripción para Google | Sin límite | Google 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
- Uno cuenta grafemas y el otro unidades UTF-16: cada emoji y algunas letras poco comunes cambian el resultado.
- Espacios y saltos de línea: algunas herramientas no los cuentan, y un salto de línea de Windows son dos caracteres.
- Normalización: una tilde guardada como marca aparte añade un punto de código hasta que el texto se normaliza.
- Reglas de cada plataforma: X pondera caracteres y enlaces, el SMS cuenta bytes y un campo de título cuenta caracteres.
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
- 3GPP TS 23.040 — Technical realization of the Short Message Service (SMS)
- 3GPP TS 23.038 — Alphabets and language-specific information
- X Developer Platform — Counting characters
- YouTube Help — Edit video settings
- Google Search Central — Control your snippets in search results
- MDN Web Docs — String: length
Guías relacionadas
- Direcciones IP explicadas: IPv4, IPv6 y los rangos reservados
- Subredes y CIDR explicados: prefijos, máscaras y hosts utilizables
- Registros DNS explicados: A, AAAA, CNAME, MX, TXT y NS
- ¿Está caído un sitio web o solo te pasa a ti? Cómo comprobarlo paso a paso
- Códigos de estado HTTP y errores de Cloudflare: qué significan 403, 404, 429, 500, 503 y 521
- Marcas de tiempo Unix y zonas horarias explicadas
- Contar fechas: días entre fechas, años bisiestos y semanas ISO
- Husos horarios y horario de verano: reuniones entre ciudades
- Formatos de imagen explicados: JPEG, PNG, WebP, AVIF y HEIC
- El tamaño de una imagen explicado: píxeles, DPI, peso y calidad
- Las fotos del móvil explicadas: HEIC, metadatos EXIF y tu privacidad
- Fortaleza de las contraseñas explicada: longitud, entropía y frases de contraseña
- Funciones hash: SHA-256, sumas de comprobación y hash de contraseñas
- JSON Web Tokens: claims, firmas y validación segura
- Claves API explicadas: longitud, formato, almacenamiento y rotación
- Los UUID explicados: v4, v7 y cómo elegir la versión adecuada
- Los códigos QR explicados: capacidad, corrección de errores y tamaño de impresión
- Porcentajes e IVA explicados: añadir, quitar y encadenar
- Errores comunes en JSON y cómo corregirlos
- Los archivos CSV explicados: separadores, comillas, codificación y Excel
- Las codificaciones de texto explicadas: UTF-8, Base64 y codificación URL
- Expresiones regulares: clases, cuantificadores y grupos
- MB o MiB, Mbps o MB/s: tamaños de archivo y velocidades
- Expresiones cron explicadas: campos, pasos y zonas horarias
- Parámetros UTM explicados: etiquetar enlaces para la analítica
- Punto de equilibrio, margen y ROAS: los números de un pequeño negocio
- Tarifas freelance explicadas: tarifa por hora, tarifa diaria y horas facturables
- RPM y CPM de YouTube explicados: lo que gana de verdad un creador
- El contraste de color explicado: ratios WCAG, texto legible y formatos de color
- Editar PDF en el navegador: qué se conserva al unir, dividir y convertir