Contador de bytes por codificación
Mide cuántos bytes ocupa tu texto en UTF-8, Shift_JIS, EUC-JP, UTF-16 y JIS (ISO-2022-JP). Útil para verificar los límites de columnas de base de datos y los límites de formularios antiguos.
El recuento de caracteres y el de bytes no son lo mismo
Que diez caracteres ocupen treinta bytes es cosa de todos los días en cuanto entra en juego un texto no latino. **El recuento de bytes de una misma cadena cambia con la codificación:** en UTF-8 un carácter japonés ocupa tres bytes y un emoji cuatro, mientras que en Shift_JIS un carácter japonés cabe en dos. Esta herramienta muestra de una vez cuántos bytes suma su entrada bajo cinco esquemas a la vez, a saber UTF-8, Shift_JIS, EUC-JP, UTF-16 e ISO-2022-JP.
**El recuento de unidades de código UTF-16 que aparece al lado es exactamente la cifra que devuelve `.length` en JavaScript.** Aquí está el tropiezo que más se pasa por alto, porque los emoji y ciertos caracteres se representan mediante un par suplente de dos unidades, de modo que **lo que una persona cuenta como un carácter, `.length` lo cuenta como dos.** Por eso un límite de longitud implementado con `.length` rechaza antes de lo previsto una entrada que contenga emoji. Del lado de la base de datos ocurre otro tanto: que un `VARCHAR(255)` cuente bytes o caracteres depende del producto y de su configuración, así que tener ambas cifras a la vista le evita juzgar mal.
Cómo se usa
- Escriba su texto Los recuentos se actualizan en cuanto pega. Los saltos de línea son perfectamente admisibles.
- Compare el recuento de caracteres con el de bytes **Un solo carácter puede ascender a tres bytes en UTF-8.**
- Lea la fila de la codificación que le atañe Fíjese en el esquema que emplean de verdad su almacenamiento o su destino.
- Consulte el recuento de unidades UTF-16 **Si su límite se aplica con `.length` de JavaScript, esta es la cifra que decide el resultado.**
Consejos para aprovecharla mejor
- En UTF-8, los caracteres alfanuméricos de ancho medio ocupan 1 byte cada uno, mientras que los caracteres japoneses (hiragana, katakana, kanji) suelen ocupar 3 bytes cada uno, por lo que el mismo número de caracteres puede significar cantidades de bytes muy distintas entre un texto en inglés y uno en japonés.
- Los sistemas antiguos que aplican límites basados en bytes a columnas como VARCHAR(255) alcanzan su límite mucho antes con texto japonés que con un texto en inglés de la misma longitud en caracteres.
- La mayoría de los emojis se representan mediante un par sustituto de dos unidades de código, ocupando 4 bytes tanto en UTF-8 como en UTF-16, lo que explica por qué los contadores de caracteres de las redes sociales a veces alcanzan su límite antes de lo esperado.
- Si ya conoces una cantidad de bytes y quieres convertirla a KB, MB u otras unidades, usa nuestra herramienta hermana "Conversor de unidades de bytes": esta herramienta se encarga del cálculo inverso, de texto a cantidad de bytes.
Cuándo resulta útil
Evitar un desbordamiento en una columna
**Donde el almacenamiento se limita por bytes, el texto japonés cabe en apenas un tercio de lo que cabría suponer.** Puede comprobarlo antes de insertar.
Diseñar el límite de entrada de un formulario
Le da el material para decidir si poner el tope en caracteres o en bytes.
Conectar con un sistema heredado
En los archivos de ancho fijo y en los intercambios en Shift_JIS, el recuento de bytes es la posición de la columna.
Probar cómo se tratan los emoji
**Puede confirmar si una cadena con pares suplentes se toma con la longitud que usted pretende.**
Términos de codificación de caracteres
- UTF-8
- Un esquema que representa los caracteres del mundo en uno a cuatro bytes de longitud variable. **Como regla, ASCII ocupa uno, el japonés tres y los emoji cuatro.**
- Shift_JIS
- Un esquema para el japonés en el que **un carácter japonés cabe en dos bytes.** Sigue en uso en sistemas antiguos y archivos de ancho fijo.
- EUC-JP
- Un esquema japonés largamente usado en sistemas UNIX. Un carácter japonés ocupa de ordinario dos bytes.
- UTF-16
- Un esquema que representa los caracteres en unidades de dieciséis bits. **Las cadenas de JavaScript se cuentan en estas unidades.**
- Par suplente
- El arreglo por el cual **un carácter demasiado grande para una unidad UTF-16 se expresa como una pareja de dos.** Los emoji y ciertos caracteres caen en esta clase.
- ISO-2022-JP
- Un esquema que conmuta juegos de caracteres mediante secuencias de escape, largamente usado en el correo japonés. Se le llama también sencillamente JIS.
Preguntas frecuentes
A propósito — La relación oculta entre los límites de caracteres en redes sociales y el número de bytes
Las versiones antiguas del juego de caracteres "utf8" de MySQL tenían una limitación sorprendente: en realidad no podían almacenar emojis de Unicode (caracteres suplementarios a partir de U+10000). UTF-8 en sí es una codificación de longitud variable que admite hasta 4 bytes por carácter, pero el "utf8" de MySQL estaba históricamente limitado a 3 bytes por carácter, lo que provocaba errores al insertar texto con emojis. Migrar a "utf8mb4", que sí admite correctamente el rango completo de 4 bytes, es ahora la solución recomendada: un ejemplo muy conocido de por qué comprender la relación entre la codificación de caracteres y el número de bytes importa en la práctica.
Cuando Twitter (ahora X) aplicaba su famoso límite de 140 caracteres, hubo un largo debate sobre la equidad entre idiomas: los usuarios japoneses podían expresar una idea bastante completa en 140 caracteres, mientras que los usuarios de inglés apenas podían escribir 20 o 30 palabras en el mismo límite. Esto se debe a que un solo carácter kanji japonés puede transmitir mucha más información que una sola letra en inglés. Twitter acabó introduciendo un sistema de conteo ponderado en el que idiomas como el japonés contaban como "1 carácter = 1 punto", mientras que otros contaban ciertos caracteres como "2 bytes = 1 punto", en un intento de equilibrar la balanza entre idiomas.
Los SMS en móviles tienen una peculiaridad similar. Un SMS codificado con el estándar GSM permite hasta 160 caracteres por mensaje, pero en cuanto incluye un solo carácter fuera del juego de caracteres GSM de 7 bits —como un emoji o un carácter japonés—, la codificación cambia a UCS-2 (aproximadamente equivalente a UTF-16) y el límite cae en picado a solo 70 caracteres. El hecho de que usar un solo carácter japonés pueda reducir a más de la mitad la longitud disponible del mensaje es un ejemplo perfecto y real de la relación entre codificación de caracteres y número de bytes que esta herramienta está pensada para medir.