Resumen

  • RFC 2070 trató la codificación externa como propiedad de la representación concreta y el juego de caracteres UCS como propiedad fija del documento HTML abstracto.
  • El parámetro charset elegía el mapeo de octetos a caracteres; las referencias numéricas se resolvían después contra un espacio fijo y por ello no cambiaban de identidad con la codificación.
  • Obtener el carácter correcto no probaba que SGML construyera la estructura prevista, que hubiera una fuente disponible, que la dirección fuera correcta ni que el lector entendiera el resultado.

La misma letra puede tener tres historias. Puede aparecer como carácter literal en una codificación que la contenga, como varios bytes en UTF-8 o como una referencia numérica formada por signos ASCII. Si se comparan sólo los archivos, las historias parecen incompatibles. Si se observa el carácter abstracto que recibe HTML tras la decodificación y la resolución de referencias, pueden converger.

RFC 2070 hizo de esa convergencia una obligación del modelo. El recurso físico no definía el universo de caracteres de la página. Sólo suministraba una representación que debía convertirse antes del análisis específico de HTML.

SGML necesitaba números de carácter, no octetos de red

En 1997 HTML seguía descrito como una aplicación de SGML. El juego de caracteres del documento decía qué significaba cada número de carácter para la DTD y para los documentos que la usaban. No era una tabla que se renegociara con cada respuesta HTTP.

HTML 2.0, en RFC 1866, cubría Latin-1 y hacía coincidir sus posiciones con ISO 10646, a la espera de un repertorio mayor. RFC 2070 adoptó el UCS de ISO 10646:1993, con sus enmiendas, para el documento HTML. El texto histórico señaló que entonces coincidía código por código con Unicode 1.1.

La modificación permitió datos fuera de ISO-8859-1 y amplió las referencias numéricas. También conservó límites SGML. Los números 128 a 159 seguían marcados como no usados; por tanto, que un programa mostrara algo para ’ no convertía la referencia en válida bajo aquella declaración.

Una etiqueta indicaba cómo entrar, no qué había al final

La codificación externa quedaba fuera de HTML. En HTTP la indicaba el charset del Content-Type; en correo, MIME. RFC 2070 señaló que FTP y los sistemas de archivos distribuidos carecían entonces de un mecanismo normalizado equivalente.

El nombre podía engañar. MIME utilizaba charset para una conversión completa de secuencias de octetos a secuencias de caracteres, incluso cuando el camino inverso no era único o posible para todos los caracteres. Por eso la etiqueta seleccionaba un decodificador. No sustituía al juego de caracteres del documento.

El RFC dibujó el recorrido: recurso, decodificador, gestor de entidades, analizador SGML, aplicación y pantalla. El decodificador cruzaba la frontera de representación. Las etapas intermedias trabajaban con caracteres del documento. La pantalla podía volver a transformar esos caracteres para el dispositivo.

No se trataba de imponer seis procesos internos. Una implementación podía organizarse de otra manera si su comportamiento observable respetaba la separación.

La referencia numérica era una operación posterior

La estabilidad de И dependía del orden. Primero había que convertir los bytes en los signos que forman la referencia. Después el analizador podía reconocer el patrón y consultar el número en el UCS fijo. Si el primer paso producía signos equivocados, el número no actuaba como detector automático del charset.

El formulario mostraba la frontera inversa. Una opción por defecto sin editar no tenía por qué volver con los mismos octetos que poseía en la página original. Podía regresar como otra codificación válida de la misma secuencia textual; además, combinaciones de base y diacríticos podían alternar con caracteres precompuestos. Igualdad de texto e igualdad de bytes eran recibos diferentes.

Antes de decodificar había que decidir qué señal creer

RFC 2070 registró dos problemas de su época: muchos servidores omitían el parámetro correcto y algunos navegadores reaccionaban mal cuando aparecía. No son datos de despliegue actual.

La prioridad propuesta colocaba primero el charset recibido de la fuente, después el META HTTP-EQUIV del documento y finalmente el atributo consultivo del enlace. META tenía una limitación circular: el receptor debía interpretar correctamente el comienzo del archivo para llegar al elemento que explicaba la codificación. Sólo ciertas codificaciones mantenían reconocibles los octetos de valor ASCII hasta ese punto.

La señal ganadora seguía sin ser prueba material. Un encabezado podía afirmar ISO-2022-JP mientras el cuerpo no obedecía ese contrato. La especificación exigía respetar la etiqueta soportada; una investigación necesita conservar también los bytes y la salida real del decodificador.

UCS no incluía todas las fuentes del mundo

Un carácter válido podía no tener glifo. RFC 2070 asumió la ausencia de recursos tipográficos y dejó abierta la respuesta: una marca visible, una representación hexadecimal u otra política. Ese fallo ocurría después de que la identidad del carácter ya estuviera disponible.

La lengua añadía decisiones sobre glifos, comillas, guiones, ligaduras, espacios o voz. La bidireccionalidad añadía propiedades, DIR y BDO. Decodificar correctamente una cadena árabe o hebrea no demostraba que su orden visible conservara el sentido.

Así, un cuadro vacío no demuestra un error de charset y una frase legible no demuestra bytes correctos. La observación debe seguir la transición exacta que falló.

El límite continuó después del RFC

RFC 2854 trasladó la definición normativa de HTML a las recomendaciones del W3C y dejó obsoletos los RFC anteriores, incluido RFC 2070. Aun así, describió charset como la codificación que representa el documento en bytes. HTML 4.01 reiteró que conocer el juego de caracteres del documento no basta para interpretar una secuencia intercambiada.

La perspectiva posterior de Lu Heng permite leer la arquitectura sin atribuir intenciones inventadas a sus autores. El UCS fijo era un mínimo compartido; cada implementación decidía localmente qué decodificadores, errores, fuentes y salidas podía sostener. La publicación del estándar no era ejecución ni evidencia de adopción.

El logro de RFC 2070 fue modesto y profundo: permitió que los bytes fueran locales a la representación sin volver local la identidad del carácter. Todo lo que venía después tenía que producir su propio recibo.

Fuentes