Punto de código (Codepoint) - la dirección de cada carácter en Unicode
Este artículo se lee en unos 3 minutos.
Cada carácter que puedes escribir, pegar o mostrar tiene una dirección única en Unicode llamada punto de código.Se escribe como U+ seguido de un número hexadecimal (por ejemplo, U+1F600 para 😀). Los puntos de código son la base de cómo los ordenadores almacenan y transmiten texto. Entenderlos te ayuda a depurar problemas con emoji, contar caracteres correctamente y escribir mejor código de manejo de texto.
Definición
Un punto de código es un valor numérico en el espacio de códigos Unicode (que va de U+0000 a U+10FFFF). Cada punto de código se asigna a exactamente un carácter abstracto. El espacio total permite 1.114.112 puntos de código posibles, de los cuales unos 150.000 están actualmente asignados.
Cómo leer un punto de código
La notación U+XXXX (o U+XXXXX para caracteres por encima del Plano Multilingüe Básico) usa dígitos hexadecimales:
- U+0041 = A (letra latina mayúscula A)
- U+3042 = あ (hiragana あ)
- U+1F600 = 😀 (cara sonriente)
- U+1F338 = 🌸 (flor de cerezo)
Los caracteres en el rango U+0000 a U+FFFF están en el Plano Multilingüe Básico (BMP). La mayoría de los emoji se encuentran por encima de U+FFFF, en el Plano Multilingüe Suplementario (SMP), por lo que requieren un tratamiento especial en algunos lenguajes de programación.
Punto de código vs. carácter vs. glifo
| Concepto | Qué es | Ejemplo |
|---|---|---|
| Punto de código | El número (dirección) | U+1F600 |
| Carácter | El concepto abstracto | «Cara sonriente» |
| Glifo | La representación visual | 😀 (varía según la plataforma) |
Por qué los puntos de código de emoji importan a los desarrolladores
Sorpresas con la longitud de cadenas
En JavaScript, "😀".length devuelve 2, no 1. Esto se debe a que las cadenas de JavaScript usan codificación UTF-16, y los emoji por encima de U+FFFF requieren un par sustituto (dos unidades de código de 16 bits). Para contar caracteres reales, usa:
[..."😀"].length→ 1 (expandido en un array de puntos de código)new Intl.Segmenter()para contar clústeres de grafemas
Almacenamiento en bases de datos
El charset utf8 de MySQL solo soporta hasta 3 bytes por carácter (solo BMP). Los emoji requieren 4 bytes, así que necesitas utf8mb4 para almacenarlos sin pérdida de datos. El tipo text de PostgreSQL maneja todo Unicode de forma nativa.
Expresiones regulares
Hacer coincidir emoji en regex requiere patrones con soporte Unicode. En JavaScript: /\p{Emoji}/u coincide con cualquier carácter emoji. Sin la bandera u, los pares sustitutos no coincidirán correctamente.
Cómo encontrar el punto de código de un carácter
- DevTools del navegador:
"🌸".codePointAt(0).toString(16)→ "1f338" - Python:
hex(ord("🌸"))→ "0x1f338" - Línea de comandos:
printf '%x\n' "'🌸" - En línea: Unicode Charts para explorar por bloque
Puntos de código en el arte con emoji
Al crear combinaciones de emoji, conocer los puntos de código te ayuda a:
- Identificar por qué un carácter se muestra como un cuadrado vacío (punto de código no soportado)
- Distinguir entre caracteres visualmente similares de bloques diferentes
- Depurar problemas de copiar y pegar donde caracteres invisibles (ZWJ, selectores de variación) se eliminan
- Calcular el «coste» real de una combinación en plataformas que cuentan puntos de código
Términos relacionados
- ZWJ (Zero Width Joiner) - carácter invisible que combina emoji