Convertidor Unicode
Convierte entre texto y codificación Unicode con múltiples formatos de salida
Detalles de Puntos de Código (clic para copiar)
¿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
- Introduce o pega el texto que quieras convertir en el cuadro de entrada
- Selecciona el sentido de la conversión: texto a Unicode o Unicode a texto
- Elige el formato de salida: \uXXXX o U+XXXX (disponible al codificar)
- 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
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 logEmoji 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-tripDecodificar 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 CJKPreguntas 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.