Una referencia numérica de caracteres ( NCR ) es una construcción de marcado común utilizada en SGML y lenguajes de marcado derivados de SGML como HTML y XML . Consiste en una secuencia corta de caracteres que, a su vez, representa un solo carácter. Desde WebSgml , XML y HTML 4 , se utilizan los puntos de código del conjunto de caracteres universal (UCS) de Unicode . Las NCR se utilizan normalmente para representar caracteres que no se pueden codificar directamente en un documento en particular (por ejemplo, porque son caracteres internacionales que no caben en el conjunto de caracteres de 8 bits que se utiliza, o porque tienen un significado sintáctico especial en el lenguaje). Cuando un lector que reconoce el marcado interpreta el documento, cada NCR se trata como si fuera el carácter que representa.
En SGML, HTML y XML, las siguientes son todas referencias de caracteres numéricos válidas para la letra mayúscula griega Sigma
En SGML, HTML y XML, las siguientes son todas referencias de caracteres numéricos válidas para la letra mayúscula latina AE
En SGML, HTML y XML, las siguientes son todas referencias de caracteres numéricos válidas para la letra latina minúscula s ß.
Lista de referencias de caracteres numéricos para los caracteres ASCII imprimibles :
Los lenguajes de marcado suelen definirse en términos de caracteres UCS o Unicode. Es decir, un documento consta, en su nivel de abstracción más fundamental, de una secuencia de caracteres, que son unidades abstractas que existen independientemente de cualquier codificación .
Idealmente, cuando los caracteres de un documento que utiliza un lenguaje de marcado se codifican para su almacenamiento o transmisión a través de una red como una secuencia de bits , la codificación que se utiliza será una que permita representar todos y cada uno de los caracteres del documento, si no en todo Unicode, directamente como una secuencia de bits particular.
Sin embargo, en ocasiones, por razones de comodidad o debido a limitaciones técnicas, los documentos se codifican con una codificación que no puede representar algunos caracteres directamente. Por ejemplo, las codificaciones ampliamente utilizadas basadas en ISO 8859 solo pueden representar, como máximo, 256 caracteres únicos como un byte de 8 bits cada una.
En la práctica, rara vez se permite que los documentos utilicen más de una codificación interna, por lo que la responsabilidad suele recaer en el lenguaje de marcado para proporcionar un medio para que los autores de los documentos expresen caracteres no codificables en términos de caracteres codificables. Esto generalmente se hace a través de algún tipo de mecanismo de "escape" .
Los lenguajes de marcado basados en SGML permiten a los autores de documentos utilizar secuencias especiales de caracteres del rango ASCII (los primeros 128 puntos de código de Unicode) para representar o hacer referencia a cualquier carácter Unicode, independientemente de si el carácter representado está directamente disponible en la codificación del documento. Estas secuencias especiales son referencias de caracteres .
Las referencias de caracteres que se basan en el punto de código UCS o Unicode del carácter al que se hace referencia se denominan referencias de caracteres numéricos . En HTML 4 y en todas las versiones de XHTML y XML, el punto de código se puede expresar como un número decimal (base 10) o como un número hexadecimal (base 16). La sintaxis es la siguiente:
Carácter U+0026 ( ampersand ), seguido del carácter U+0023 ( signo de número ), seguido de una de las siguientes opciones:
Todo ello seguido del carácter U+003B ( punto y coma ). Las versiones anteriores de HTML no permitían la sintaxis hexadecimal.
Los caracteres que componen una referencia de caracteres numéricos se pueden representar en cualquier codificación de caracteres utilizada actualmente en informática y telecomunicaciones, por lo que no existe el riesgo de que la referencia en sí no se pueda codificar.
Existe otro tipo de referencia de carácter denominada referencia de entidad de carácter , que permite hacer referencia a un carácter mediante un nombre en lugar de un número. (Al nombrar un carácter se crea una entidad de carácter ). HTML define algunas entidades de carácter, pero no muchas; todos los demás caracteres solo se pueden incluir mediante codificación directa o mediante NCR.
El conjunto de caracteres universal definido por ISO 10646 es el "conjunto de caracteres del documento" de SGML, HTML 4, por lo que, de forma predeterminada, cualquier carácter de dicho documento y cualquier carácter al que se haga referencia en dicho documento debe estar en el UCS.
Si bien la sintaxis de SGML no prohíbe las referencias a puntos de código no válidos o no asignados, como 
, los lenguajes de marcado derivados de SGML, como HTML y XML, pueden restringir, y a menudo lo hacen, las referencias de caracteres numéricos únicamente a aquellos puntos de código que están asignados a caracteres.
También pueden aplicarse restricciones por otras razones. Por ejemplo, en HTML 4, 
, que es una referencia a un carácter de control de "avance de página" no imprimible, está permitido porque se permite un carácter de avance de página. Pero en XML, el carácter de avance de página no se puede utilizar, ni siquiera por referencia. [1] [ cita requerida ] Como otro ejemplo, €
, que es una referencia a otro carácter de control, no se puede utilizar ni referenciar en HTML ni en XML, pero cuando se utiliza en HTML, normalmente los navegadores web no lo marcan como un error; algunos de ellos lo interpretan como una referencia al carácter representado por el valor de código 128 en la codificación Windows-1252 por razones de compatibilidad. Este carácter, "€", tiene que representarse como €
en un código HTML compatible con el estándar. Como ejemplo adicional, antes de la publicación de XML 1.0 Segunda Edición el 6 de octubre de 2000, XML 1.0 se basaba en una versión anterior de ISO 10646 y prohibía el uso de caracteres superiores a U+FFFD, excepto en datos de caracteres, lo que hacía 𐀀
ilegal una referencia como (U+10000). En XML 1.1 y ediciones más recientes de XML 1.0, se permite este tipo de referencia, porque el repertorio de caracteres disponible se amplió explícitamente.
Los lenguajes de marcado también imponen restricciones sobre dónde pueden aparecer las referencias de caracteres.
En las versiones iniciales de SGML y HTML , las referencias de caracteres numéricos se interpretaban en relación con la codificación de caracteres del documento, en lugar de Unicode . En el caso de los documentos en alfabeto latino, las referencias de caracteres numéricos a caracteres entre x80 y x9F en esos documentos no serán correctas en relación con Unicode y deberán recodificarse. Los estándares HTML anteriores a HTML 4 solo admitían documentos en alfabeto latino occidental: el tratamiento de las referencias de caracteres superiores a #7F puede variar entre aplicaciones y convenciones nacionales.
Por ejemplo, como se mencionó anteriormente, la referencia de carácter numérico correcta para el símbolo del euro "€" U+20AC
cuando se utiliza Unicode es decimal €
y hexadecimal €
. Sin embargo, si se utilizan herramientas que admitan implementaciones obsoletas de HTML, la referencia €
(símbolo del euro en la página de códigos CP-1252 ) o ¤
(símbolo del euro en ISO/IEC 8859-15 ) puede funcionar.
Como otro ejemplo, si un texto se creó originalmente con el conjunto de caracteres MacRoman , la comilla doble izquierda “ se representará con el punto de código xD2. Esto no se mostrará correctamente en un sistema que espere un documento codificado como UTF-8, ISO 8859-1 o CP-1252, donde este punto de código está ocupado por la letra Ò . La referencia de carácter numérico correcta para “ en HTML 4 y versiones posteriores es “
, porque U+ 201C es su código UCS. En algunos sistemas, la referencia de carácter nombrada “
también puede estar disponible.