Herramientas
Guías

Hex / ASCII / Unicode

Codificación

Convierte entre texto, bytes hex UTF-8 y puntos de código Unicode.

100 % del lado del cliente Sin backend
Texto
Hex (UTF-8)
Puntos de código
En esta página

¿Qué es un conversor hex / ASCII / Unicode?#

El mismo trozo de texto puede escribirse de tres formas genuinamente distintas, y esta herramienta te deja ver las tres a la vez:

  • Texto: los caracteres literales tal como los escribirías y leerías (Hello 世界 🌍).
  • Bytes hex: la secuencia de bytes UTF-8 en bruto en hexadecimal, un byte por cada par (48 65 6C 6C 6F 20 ...). Es lo que realmente viaja por una red o se sienta en un archivo.
  • Puntos de código: los valores escalares Unicode, un U+XXXX por carácter (U+0048 U+0065 ... U+1F30D). Es la forma en que el propio Unicode numera los caracteres, independiente de cualquier codificación de bytes.

La razón por la que estas tres vistas importan es que no miden lo mismo en cuanto sales del ASCII, y esa es la única fuente de más confusión de codificación de texto que cualquier otra. Un carácter es un punto de código, pero puede ocupar de uno a cuatro bytes en UTF-8. El emoji del globo 🌍 es un único carácter (U+1F30D), pero en UTF-8 son cuatro bytes (F0 9F 8C 8D). Si alguna vez has contado mal la longitud de una cadena, has visto una base de datos rechazar una cadena por «demasiado larga» o has visto una porción de subcadena caer en medio de un carácter, ya te has topado con ese hueco.

Edita cualquiera de las tres representaciones y las otras dos se calculan al instante. El analizador es tolerante: la entrada hex admite espacios, dos puntos, guiones y prefijos 0x; la entrada de puntos de código admite U+, \u, 0x o hex puro, separados por espacios, comas o puntos y comas.

Cómo usarlo#

  1. Usa el selector de modo sobre la caja de entrada para declarar lo que estás tecleando: Texto, Hex o Puntos de código.
  2. Pega o edita en la caja de entrada. Las otras dos vistas se rellenan automáticamente a la derecha.
  3. Usa Copiar junto a cualquiera de los tres campos de resultado para llevarte esa representación.
  4. Ejemplo carga Hello 世界 🌍 para que veas cómo el ASCII, el CJK y un emoji se mapean cada uno de forma distinta. Limpiar vacía todo.

Características principales#

  • Tres vistas, una única fuente de verdad. Edita la representación que tengas a mano; las otras se calculan, nunca se mantienen a mano.
  • Bytes UTF-8, no Latin-1. La salida hex es la secuencia real de bytes UTF-8 en tránsito, lo que usa casi cualquier sistema moderno, no el supuesto heredado de un byte por carácter.
  • Consciente de los puntos de código, incluidos los astrales. La iteración con for...of significa que un emoji cuenta como un único punto de código, no como dos mitades suplentes, así lo que ves es U+1F30D, nunca D83C DF0D.
  • Estricto a la vuelta. Los bytes hex que no forman UTF-8 válido (una cadena de longitud impar, o un byte de continuación colgando) se reportan con un error claro en lugar de decodificarse a texto garabateado. Los puntos de código fuera del rango válido, y los suplentes solos (U+D800–U+DFFF), se rechazan.

Ejemplo detallado#

Carga Ejemplo para obtener Hello 世界 🌍, y las tres vistas derivadas son:

Texto:        Hello 世界 🌍
Bytes hex:    48 65 6C 6C 6F 20 E4 B8 96 E7 95 8C 20 F0 9F 8C 8D
Puntos código: U+0048 U+0065 U+006C U+006C U+006F U+0020 U+4E16 U+754C U+0020 U+1F30D

Las letras ASCII H e l l o son la parte aburrida: un byte cada una, puntos de código U+0048 a U+006F. La parte interesante es el resto:

  • 世 (U+4E16) son tres bytes UTF-8: E4 B8 96. 界 (U+754C) también son tres bytes: E7 95 8C. Un carácter, pero no un byte.
  • 🌍 (U+1F30D) son cuatro bytes UTF-8: F0 9F 8C 8D. El punto de código está por encima de U+FFFF, así que vive en el plano astral de Unicode y necesita una secuencia UTF-8 de 4 bytes; aun así es un único carácter, una entrada en la lista de puntos de código.

Ejecuta el experimento a la inversa: cambia el modo a Puntos de código, pega U+1F600 U+1F604, y observa cómo aparecen tanto el texto (emojis de la familia 😄 😄) como el hex UTF-8. Ese viaje de ida y vuelta es exactamente cómo confirmas qué bytes corresponden a qué carácter.

Preguntas frecuentes#

¿Por qué mi emoji ocupa cuatro bytes hex pero solo un punto de código?#

Porque UTF-8 es una codificación de anchura variable. Los puntos de código por debajo de U+0080 caben en un byte; U+0080–U+07FF ocupan dos; U+0800–U+FFFF ocupan tres; y cualquier punto a partir de U+10000 (la mayoría de los emojis, escrituras históricas, símbolos musicales) ocupa cuatro. El punto de código es el nombre que Unicode da al carácter; los bytes son cómo UTF-8 resulta almacenarlo. Mismo carácter, dos números distintos.

¿Cuál es la diferencia entre U+XXXX y \uXXXX?#

Se refieren al mismo punto de código, pero vienen de mundos distintos. U+0041 es la notación propia de Unicode. A es el escape que se usa en los literales de cadena de JavaScript, Java y C. El problema: \uXXXX solo admite cuatro dígitos hex, así que no puede expresar directamente un punto de código astral como U+1F30D; los lenguajes que usan \u necesitan un par suplente (🌍) o una sintaxis extendida como \u{1F30D}. La entrada de puntos de código de esta herramienta acepta ambas formas.

Pegué bytes hex y obtuve un error «UTF-8 no válido». ¿Qué significa?#

Los bytes que pegaste no forman una secuencia UTF-8 legal, casi siempre porque la cadena hex tiene longitud impar (falta medio byte), un byte inicial reclama una secuencia multibyte que los bytes siguientes no completan, o los datos estaban en realidad codificados en algo distinto de UTF-8 (GBK, Shift-JIS, Latin-1 puro). El decodificador usa modo estricto, así que el problema se reporta en lugar de producir caracteres de reemplazo en silencio.

¿Puedo usar esto para contar los «verdaderos» caracteres de una cadena?#

Sí: el conteo de puntos de código es el conteo que un usuario tendría en la cabeza, y es en lo que la mayoría de las interfaces deberían limitar. Fíjate en que Hello 世界 🌍 son 10 caracteres por puntos de código, aunque son 17 bytes en UTF-8 y 11 unidades de código UTF-16 en JavaScript (string.length). Si necesitas un presupuesto de caracteres para un tuit o un campo de formulario, cuenta puntos de código, no bytes ni string.length.