Resumen

  • Bootstring copiaba literalmente los puntos ASCII básicos y representaba cada punto no básico mediante un delta que reunía distancia numérica y posición de inserción.
  • Los enteros autodelimitados y un sesgo adaptativo hacían única y reversible la representación. No traducían ni normalizaban, y tampoco probaban admisión IDNA, registro o identidad.

El resultado de Punycode parece una cola opaca porque su objetivo no era que una persona leyera el nombre codificado. RFC 3492 se entiende mejor desde el decodificador. Primero coloca los caracteres que ya caben en ASCII. Después inserta los demás en los huecos exactos hasta recuperar la secuencia original.

Bootstring empieza separando puntos básicos. Los copia al frente en su orden relativo y, si hay alguno, añade un delimitador. En Punycode el conjunto básico es ASCII y el delimitador es el guion. Esa porción literal no traduce nada: simplemente evita codificar lo que ya pertenece al alfabeto disponible.

La cola describe lo que falta. El decodificador mantiene n, un valor candidato de punto de código, e i, una posición posible en la salida que va creciendo. El estado recorre todos los huecos; al llegar al final, i vuelve a cero y n aumenta. Cada delta cuenta cuántos estados sin inserción deben pasar antes de colocar el n actual en el i actual.

Así, un entero reúne distancia en el espacio de códigos y ubicación dentro de la cadena. El codificador atiende los puntos no básicos por orden numérico, lo que suele reducir distancias consecutivas, y calcula los deltas que harán reconstruir el orden de aparición. La posición queda incorporada sin una tabla separada.

Como varios deltas se concatenan, un entero posicional corriente no mostraría dónde termina cada uno. Bootstring usa enteros generalizados de longitud variable. Un umbral por dígito determina si hay continuación; exactamente un último dígito cae por debajo de su umbral. El orden little-endian permite separar enteros desde el principio y da una representación única de cada valor no negativo.

Después de cada delta cambia un bias. El primer salto grande se amortigua de forma especial; los siguientes se ajustan al tamaño de la salida. El último delta ofrece una pista sobre la magnitud probable del próximo. No es un modelo de lengua: es una previsión aritmética local que abarata magnitudes cercanas.

Punycode fijó base 36, letras para valores cero a 25, cifras para 26 a 35, n inicial en 128 y sesgo inicial en 72. Los parámetros afectan eficiencia, no corrección, si cumplen las condiciones de Bootstring. La implementación debe detectar desbordamientos; la cota que basta para etiquetas IDNA no autoriza aritmética sin control en otros usos.

La unicidad evitaba que una secuencia Unicode obtuviera varias etiquetas ASCII bajo autoridades DNS distintas. Pero una codificación única no produce un significado humano único. Varias secuencias Unicode pueden considerarse el mismo texto bajo una normalización o una convención lingüística. Punycode recibe la secuencia; no decide esa equivalencia.

RFC 3490 incorporó el algoritmo a IDNA. IDNA2008 conservó las A-labels Punycode y sustituyó las reglas que seleccionan y validan la entrada. Es una muestra de la especificación inicial mínima de Heng Lu: un mecanismo estrecho y reversible puede durar mientras las decisiones locales y políticas evolucionan fuera de él.

Entrada, preparación, prefijo literal, deltas, reconstrucción, admisión, registro, respuesta DNS e identidad son capas diferentes. Punycode une una secuencia con una forma ASCII. Precisamente por ser exacto en ese cometido, no debe usarse como prueba de los demás.

Fuentes