ToolActToolAct

Convertidor Unicode

Convierte entre texto y codificación Unicode con múltiples formatos de salida

Entrada
Caracteres: 0
Puntos de Código: 0
Salida
Caracteres: 0

Detalles de Puntos de Código (clic para copiar)

Ingresa texto para mostrar puntos de código de cada carácter

¿Qué es Unicode?

Unicode es un estándar de la industria informática que codifica la mayoría de los sistemas de escritura del mundo. Cada carácter Unicode tiene un identificador numérico único llamado Punto de Código, típicamente representado en hexadecimal con prefijo U+, como U+4E2D para el carácter chino '中'. La herramienta de conversión Unicode puede convertir texto a varios formatos de representación Unicode, así como revertir codificaciones Unicode a texto. Unicode describe caracteres mediante puntos de código, mientras que codificaciones como UTF-8 definen cómo esos puntos se almacenan como bytes. Esto importa al analizar texto con emojis, acentos, caracteres CJK, símbolos, controles o escrituras mezcladas. Un carácter visible puede estar formado por varios puntos de código, especialmente con marcas combinadas, selectores de variación o secuencias emoji. La herramienta sirve para depurar mojibake, normalización, escapes, caracteres invisibles y diferencias entre conteo de caracteres y longitud en bytes.

Cómo usar

Pasos

  1. Introduce o pega el texto que quieras convertir en el cuadro de entrada
  2. Selecciona el sentido de la conversión: texto a Unicode o Unicode a texto
  3. Elige el formato de salida: \uXXXX o U+XXXX (disponible al codificar)
  4. Los resultados aparecen al instante: cópialos con un clic o intercambia entrada y salida

Notas sobre la codificación

  • Los formatos de escape Unicode son útiles en código y depuración, pero reducen la legibilidad en textos normales.
  • Al decodificar, verifica los pares surrogados y la salida de emojis; dividir un par puede generar caracteres rotos.

Casos de uso

Codificar texto en formatos de escape UnicodeConvierte texto en secuencias \uXXXX al estilo de JavaScript o notación de punto de código U+XXXX. Los caracteres por encima de U+FFFF se representan como pares de sustitución en modo escape mientras que la cuadrícula de detalles sigue mostrando su punto de código completo. La conversión es un paso local de String.prototype.codePointAt y fromCodePoint, por lo que los datos del carácter permanecen en local hasta que copies la salida escapada.
Decodificar escapes Unicode de vuelta a texto legibleDecodifica patrones \uXXXX, \u{...} y U+XXXX en caracteres y copia el texto restaurado. Esto ayuda a inspeccionar logs, cadenas JSON, archivos de localización y fragmentos escapados de código o APIs. La decodificación se realiza mediante fromCharCode y fromCodePoint dentro de la página, por lo que la cadena original y los caracteres reconstruidos nunca abandonan la pestaña del navegador, algo útil cuando el fragmento contiene copia interna o nombres de producto sin publicar.
Inspeccionar puntos de código individualesCada carácter de entrada se lista con su representación visible y su valor U+, y al hacer clic en una casilla se copia ese punto de código. El conteo de caracteres y el de puntos de código se muestran por separado, lo que importa para emojis y otros caracteres de múltiples unidades. Como la cuadrícula se construye iterando la cadena de entrada en memoria, todo el mapa de puntos de código se renderiza localmente sin enviar el texto a un servicio externo de consulta Unicode.
Detectar mojibake y cadenas con doble codificaciónPega cadenas que parecen 'é' o '中文', decodifícalas y luego vuelve a codificarlas con la codificación original sospechada (UTF-8 frente a Latin-1) para confirmar si la fuente tenía doble codificación en lugar de estar corrupta en la captura. La inspección es puramente del lado del navegador: TextDecoder, iteración de puntos de código y recodificación ocurren en la página, por lo que las cadenas de producción extraídas de logs pueden analizarse sin subirlas.
Contar emojis y marcas combinantes como puntos de códigoUsa la cuadrícula de puntos de código para señalar emojis de familia, secuencias de banderas y diacríticos combinantes que ocupan múltiples casillas. El conteo separado de caracteres y puntos de código aclara por qué una cadena de '1 carácter' puede consumir 7 unidades UTF-16. Como el conteo es una iteración local sobre la entrada, incluso cadenas con contenido sensible pueden dimensionarse para columnas de base de datos o presupuestos de formato de transmisión sin salir del navegador.

Principio técnico

El Estándar Unicode (ISO/IEC 10646) asigna un punto de código numérico único a cada carácter a través de 17 planos (U+0000 a U+10FFFF). El Plano Multilingüe Básico (BMP, Plano 0) cubre U+0000–U+FFFF y contiene casi todos los sistemas de escritura modernos, incluyendo los Ideogramas CJK Unificados. Los planos suplementarios (1–16) contienen escrituras históricas, CJK poco comunes, emoji y caracteres de propósito especial. La herramienta convierte entre texto legible y dos representaciones orientadas a máquina: secuencias de escape \uXXXX al estilo de JavaScript y la notación estándar U+XXXX. UTF-16 es la codificación interna de las cadenas de JavaScript: cada carácter del BMP se almacena como una única unidad de código de 16 bits igual a su punto de código, mientras que los caracteres suplementarios (U+10000 y superiores) se codifican como pares de sustitución: se resta 0x10000 del punto de código para obtener un valor de 20 bits, que luego se divide en un sustituto alto de 10 bits (0xD800 + ((cp - 0x10000) >> 10)) y un sustituto bajo de 10 bits (0xDC00 + ((cp - 0x10000) & 0x3FF)). El modo de codificación de la herramienta detecta puntos de código suplementarios mediante String.prototype.codePointAt() y genera el escape doble \u correcto para el formato \uXXXX. Para el formato U+XXXX, el punto de código completo se muestra directamente. El modo de descodificación analiza tres sintaxis: \uXXXX (cuatro dígitos hexadecimales, solo BMP), \u{XXXXX} (sintaxis de llaves de ES6 que soporta todo el rango Unicode) y U+XXXX (la notación estándar con hexadecimal de longitud variable). La expresión regular /\\u\{([0-9a-fA-F]+)\}/g maneja los escapes con llaves y los pasa a String.fromCodePoint(), mientras que /\\u([0-9a-fA-F]{4})/g maneja los escapes tradicionales mediante String.fromCharCode(). Mezclar ambos reconstruye correctamente los pares de sustitución cuando un carácter suplementario fue codificado como dos escapes \u. La codificación UTF-8 es relevante porque determina la longitud en bytes: un carácter del BMP como '中' (U+4E2D) se codifica como 3 bytes UTF-8 (E4 B8 AD), mientras que un emoji como '😀' (U+1F600) requiere 4 bytes (F0 9F 98 80). El contador de caracteres de la herramienta distingue entre el conteo de puntos de código y el conteo de unidades de código UTF-16, una distinción útil al depurar límites de longitud en bases de datos, APIs o campos de formulario que cuentan unidades de código en lugar de caracteres.

  • Iteración de puntos de código: String.prototype.codePointAt(pos) devuelve correctamente el punto de código completo para caracteres suplementarios, a diferencia de charCodeAt() que solo devuelve el sustituto alto; la herramienta usa el operador spread [...str] para iterar por punto de código, que internamente llama al protocolo iterador de cadenas.
  • Cálculo de pares de sustitución: Para un punto de código suplementario CP > 0xFFFF, el sustituto alto es Math.floor((CP - 0x10000) / 0x400) + 0xD800 y el sustituto bajo es ((CP - 0x10000) % 0x400) + 0xDC00; el modo de codificación aplica esta fórmula para producir pares \uD800\uDC00 válidos.
  • Pipeline de regex de descodificación: Tres patrones se ejecutan secuencialmente: \u{XXXXX} (llaves ES6) → \uXXXX (hexadecimal de cuatro dígitos) → U+XXXX (notación estándar), con fromCodePoint() manejando las rutas de llaves y U+, y fromCharCode() manejando la ruta tradicional de cuatro dígitos.
  • Estructura de bytes UTF-8: Los caracteres del BMP usan de 1 a 3 bytes UTF-8 (ASCII = 1 byte, suplemento latino = 2 bytes, CJK = 3 bytes); los caracteres suplementarios usan 4 bytes siguiendo el patrón 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx; el contador de bytes de la herramienta usa new Blob([str]).size para una medición precisa.
  • Punto de código vs unidad de código: Un solo carácter visible puede ocupar múltiples puntos de código (por ejemplo, é puede ser U+00E9 o U+0065 + U+0301 con acento combinante); la herramienta reporta tanto charCount (unidades de código UTF-16) como codepointCount (valores escalares Unicode) para revelar esta discrepancia.
  • Resumen de planos Unicode: Plano 0 (BMP) = escrituras modernas, Plano 1 (SMP) = históricas + emoji + matemáticas, Plano 2 (SIP) = CJK poco comunes, Plano 14 (SSP) = etiquetas + selectores de variación, Planos 15–16 = uso privado; el modo de codificación maneja correctamente todos los planos mediante codePointAt().
  • Notación \u vs U+: \uXXXX es la secuencia de escape de JavaScript/Java/C (solo BMP sin llaves); U+XXXX es la notación canónica del Consorcio Unicode (mínimo 4 dígitos hexadecimales, sin límite superior); el selector de formato de la herramienta alterna entre estas representaciones.

Ejemplos

Chino a escape Unicode

Entrada:  你好世界 (4 caracteres CJK, 12 bytes UTF-8)
Salida: \u4f60\u597d\u4e16\u754c
Nota:   solo puntos de código BMP; útil en cadenas JSON, literales de JavaScript y archivos de log

Emoji a escape de par sustituto

Entrada:  😀🎉 (2 emojis, cada uno por encima de U+FFFF)
Salida: \uD83D\uDE00\uD83C\uDF89
Nota:   los caracteres fuera del BMP se codifican como un par sustituto UTF-16; los motores de JS antiguos necesitan String.fromCodePoint para hacer round-trip

Decodificar escapes Unicode

Entrada:  \u4e2d\u6587\u6d4b\u8bd5
Salida: 中文测试
Nota:   pega la cadena con escapes y la herramienta invierte la codificación; verifica que los bytes de salida coincidan con la fuente al depurar problemas con cargas CJK

Preguntas frecuentes

¿Qué muestra esta herramienta para cada carácter?

Punto de código (decimal y hexadecimal), nombre del bloque (p. ej. Basic Latin, CJK Unified Ideographs), categoría (Letra, Número, Símbolo, Puntuación, etc.), nombre Unicode, además de las representaciones en bytes UTF-8 / UTF-16 / UTF-32. Útil para depurar errores de codificación y para elegir el carácter correcto.

¿Cuál es la diferencia entre UTF-8, UTF-16 y UTF-32?

Las tres codifican los mismos caracteres Unicode. UTF-8 usa de 1 a 4 bytes por punto de código y es compatible byte a byte con ASCII (la codificación dominante en la web). UTF-16 usa 2 o 4 bytes (lo usan internamente JavaScript y Windows). UTF-32 siempre usa 4 bytes (raramente en la red, común en memoria).

¿Por qué '𝓗' aparece como dos unidades de código UTF-16?

Los puntos de código por encima de U+FFFF (el Plano Multilingüe Básico) se codifican como un 'par sustituto' en UTF-16: dos mitades de 16 bits. El string.length de JavaScript los cuenta como 2; Array.from(str) los trata como uno. La página muestra ambas vistas para que depures las sorpresas en el conteo de longitud.

¿Qué es una forma de normalización (NFC/NFD/NFKC/NFKD)?

Unicode permite múltiples representaciones del mismo texto visible: é puede ser un único punto de código (U+00E9) o e + acento agudo combinante (U+0065 U+0301). NFC los compone; NFD los descompone. NFKC/NFKD además colapsan caracteres de compatibilidad (½ → 1/2). Normaliza siempre antes de comparar o hashear cadenas.

¿Por qué a veces los emojis se ven como cuadrados?

La fuente de tu navegador no tiene ese glifo. Los emojis modernos usan secuencias ZWJ (p. ej. 👨‍👩‍👧 = hombre + ZWJ + mujer + ZWJ + niña) que necesitan fuentes específicas para renderizarse como una sola imagen; las fuentes antiguas muestran tres emojis separados o cuadrados.

¿Cómo busco un carácter por nombre?

Escribe el nombre (o parte de él) en el cuadro de búsqueda. Los nombres siguen la lista oficial de nombres Unicode (LATIN SMALL LETTER A, GREEK CAPITAL LETTER OMEGA, MUSICAL SYMBOL G CLEF). Los emojis comunes también tienen un 'CLDR short name' que la página reconoce.

¿Mi entrada se sube a algún servidor?

No. Las consultas usan una base de datos Unicode en el navegador. Nada se sube.