Articulo de referencia

Unicode y HTML

Las páginas web creadas con lenguaje de marcado de hipertexto ( HTML ) pueden contener texto multilingüe representado con el conjunto de caracteres universales Unicode. La clave...

Las páginas web creadas con lenguaje de marcado de hipertexto ( HTML ) pueden contener texto multilingüe representado con el conjunto de caracteres universales Unicode. La clave de la relación entre Unicode y HTML es la relación entre el "conjunto de caracteres del documento", que define el conjunto de caracteres que pueden estar presentes en un documento HTML y les asigna números, y la "codificación de caracteres externa", o "charset", que se utiliza para codificar un documento determinado como una secuencia de bytes.

En el RFC 1866, el estándar HTML 2.0 inicial, el conjunto de caracteres del documento se definió como ISO-8859-1 (posteriormente, el estándar HTML adoptaba por defecto la codificación Windows-1252 ). Se amplió a ISO 10646 (que es básicamente equivalente a Unicode) en el RFC  2070. No varía entre documentos de diferentes idiomas o creados en diferentes plataformas. La codificación de caracteres externa la elige el autor del documento (o el software que utiliza el autor para crear el documento) y determina cómo los bytes utilizados para almacenar y/o transmitir el documento se asignan a caracteres del conjunto de caracteres del documento. Los caracteres que no están presentes en la codificación de caracteres externa elegida pueden representarse mediante referencias de entidad de caracteres.

La relación entre Unicode y HTML suele ser un tema complicado para muchos profesionales informáticos, autores de documentos y usuarios web . La representación precisa del texto en páginas web de diferentes lenguajes naturales y sistemas de escritura se complica por los detalles de la codificación de caracteres , la sintaxis del lenguaje de marcado , la fuente y los distintos niveles de compatibilidad de los navegadores web .

Caracteres de documentos HTML

Las páginas web suelen ser documentos HTML o XHTML . Ambos tipos de documentos están constituidos, en un nivel fundamental, por caracteres , que son grafemas y unidades similares a grafemas, independientemente de cómo se manifiesten en los sistemas de almacenamiento y redes informáticas .

Un documento HTML es una secuencia de caracteres Unicode. Más específicamente, los documentos HTML 4.0 deben constar de caracteres del conjunto de caracteres de documentos HTML: un repertorio de caracteres en el que a cada carácter se le asigna un punto de código  entero único y no negativo . Este conjunto se define en la DTD de HTML 4.0 , que también establece la sintaxis (secuencias de caracteres permitidas) que pueden producir un documento HTML válido. El conjunto de caracteres de documentos HTML para HTML 4.0 consta de la mayoría, pero no todos, de los caracteres definidos conjuntamente por Unicode e ISO/IEC 10646: el conjunto de caracteres universal (UCS).

Al igual que los documentos HTML, un documento XHTML es una secuencia de caracteres Unicode. Sin embargo, un documento XHTML es un documento XML que, si bien no tiene una capa de abstracción explícita de "carácter de documento" , se basa en una definición similar de caracteres permitidos que cubre la mayoría, pero no todas, las definiciones de caracteres Unicode/UCS. Los conjuntos utilizados por HTML y XHTML/XML son ligeramente diferentes, pero estas diferencias tienen poco efecto en el autor promedio de documentos.

Independientemente de si el documento es HTML o XHTML, cuando se almacena en un sistema de archivos o se transmite a través de una red, los caracteres del documento se codifican como una secuencia de octetos de bits ( bytes ) de acuerdo con una codificación de caracteres particular. Esta codificación puede ser un formato de transformación Unicode , como UTF-8 , que puede codificar directamente cualquier carácter Unicode, o una codificación heredada, como Windows-1252 , que no puede. Sin embargo, incluso cuando se utilizan codificaciones que no admiten todos los caracteres Unicode, el documento codificado puede hacer uso de referencias de caracteres numéricos . Por ejemplo, (☺) se utiliza para indicar un carácter de cara sonriente en el conjunto de caracteres Unicode. ☺

Codificación de caracteres

Para admitir todos los caracteres Unicode sin recurrir a referencias de caracteres numéricos, una página web debe tener una codificación que cubra todos los caracteres Unicode. La más popular es UTF-8 , donde los caracteres ASCII , como letras inglesas, dígitos y algunos otros caracteres comunes se conservan sin cambios frente a ASCII. Esto hace que el código HTML (como <br> y </div>) no se modifique en comparación con ASCII. Los caracteres fuera del rango ASCII se almacenan en 2 a 4 bytes. También es posible utilizar UTF-16 , donde la mayoría de los caracteres se almacenan como dos bytes con diferente orden de bytes , que es compatible con los navegadores modernos, pero se utiliza con menos frecuencia.

Referencias de caracteres numéricos

Para evitar las limitaciones de las codificaciones heredadas, HTML está diseñado de tal manera que es posible representar caracteres de todo el código Unicode dentro de un documento HTML mediante una referencia numérica de caracteres : una secuencia de caracteres que deletrea explícitamente el punto de código Unicode del carácter que se representa. Una referencia de carácter toma la forma N , donde N es un número decimal para el punto de código Unicode o un número hexadecimal , en cuyo caso debe ir precedido de . Los caracteres que componen la referencia numérica de caracteres son universalmente representables en todas las codificaciones aprobadas para su uso en Internet. [ cita requerida ]&#;x

El soporte para el sistema hexadecimal en este contexto es más reciente, por lo que los navegadores más antiguos pueden tener problemas para mostrar caracteres referenciados con números hexadecimales, pero probablemente tendrán un problema para mostrar caracteres Unicode por encima del punto de código 255 de todos modos. Para garantizar una mejor compatibilidad con navegadores más antiguos, sigue siendo una práctica común convertir el punto de código hexadecimal en un valor decimal (por ejemplo, &#21512;en lugar de &#x5408;). [ cita requerida ]

Entidades de caracteres con nombre

En HTML 4, existe un conjunto estándar de 252 entidades de caracteres con nombre para caracteres (algunos comunes, otros desconocidos) que no se encuentran en ciertas codificaciones de caracteres o que son sensibles al marcado en algunos contextos (por ejemplo, corchetes angulares y comillas). Aunque se puede hacer referencia a cualquier carácter Unicode por su punto de código numérico, algunos autores de documentos HTML prefieren utilizar estas entidades con nombre en su lugar, siempre que sea posible, ya que son menos crípticas y los primeros navegadores las soportaban mejor.

Las entidades de caracteres se pueden incluir en un documento HTML mediante el uso de referencias de entidad , que toman la forma EntityName , donde EntityName es el nombre de la entidad. Por ejemplo, , de forma muy similar a o , representa U+ 2014 : el carácter de guión largo "—" incluso si la codificación de caracteres utilizada no contiene ese carácter. &;&mdash;&#8212;&#x2014;

Para ver la lista completa, consulte: Lista de referencias de entidades de caracteres XML y HTML .

Determinación de la codificación de caracteres

Para procesar HTML correctamente, un navegador web debe determinar qué caracteres Unicode están representados por la forma codificada de un documento HTML. Para ello, el navegador web debe saber qué codificación se utilizó.

Codificación de información

Cuando un documento se transmite a través de un mensaje MIME o un transporte que utiliza tipos de contenido MIME, como una respuesta HTTP , el mensaje puede indicar la codificación a través de un encabezado Content-Type, como Content-Type: text/html; charset=UTF-8. Se permiten otros medios externos para declarar la codificación, pero rara vez se utilizan. Si el documento utiliza una codificación Unicode , la información de codificación también puede estar presente en forma de una marca de orden de bytes (BOM). Finalmente, la codificación se puede declarar a través de la sintaxis HTML. Para la text/htmlserialización, entonces, siempre que la página esté codificada en una extensión de ASCII (como UTF-8 y, por lo tanto, no si la página utiliza UTF-16 ), se puede utilizar un metaelemento, como <meta http-equiv="content-type" content="text/html; charset=UTF-8">o (comenzando con HTML5 ) <meta charset="UTF-8">. Para las páginas HTML serializadas como XML, las opciones de declaración son confiar en la codificación predeterminada (que para los documentos XML es UTF-8) o utilizar una declaración de codificación XML. El atributo meta no desempeña ningún papel en HTML servido como XML.

Valores predeterminados de codificación

Se aplica un valor predeterminado de codificación cuando no hay una declaración de codificación interna o externa y tampoco una marca de orden de bytes. Si bien se requiere que el valor predeterminado de codificación para las páginas HTML que se sirven como XML sea UTF-8, el valor predeterminado de codificación para una página web normal (es decir: para páginas HTML serializadas como text/html) varía según la localización del navegador. Para un sistema configurado principalmente para idiomas de Europa occidental, generalmente será Windows-1252 . Para las configuraciones regionales del alfabeto cirílico, el valor predeterminado suele ser Windows-1251 . Para un navegador de una ubicación donde prevalecen las codificaciones de caracteres multibyte heredadas , es probable que se aplique alguna forma de detección automática.

Debido al legado de las representaciones de texto de 8 bits en los lenguajes de programación y los sistemas operativos y al deseo de evitar cargar a los usuarios con la necesidad de comprender los matices de la codificación, muchos editores de texto utilizados por los autores de HTML no pueden o no quieren ofrecer una opción de codificaciones al guardar archivos en el disco y, a menudo, ni siquiera permiten la entrada de caracteres más allá de un rango muy limitado. En consecuencia, muchos autores de HTML desconocen los problemas de codificación y es posible que no tengan idea de qué codificación utilizan realmente sus documentos. Los malentendidos, como la creencia de que la declaración de codificación afecta a un cambio en la codificación real (cuando en realidad es solo una etiqueta que podría ser inexacta), también es una razón para esta actitud del editor. Otro factor que contribuye en la misma dirección es la llegada de UTF-8, que disminuye en gran medida la necesidad de otras codificaciones y, por lo tanto, los editores modernos tienden a utilizar UTF-8 por defecto, como recomienda la especificación HTML5 [1] .

Marca de orden de bytes/sniffing Unicode

Para ambas serializaciones de HTML (content-type "text/html" y content/type "application/xhtml+xml"), la marca de orden de bytes (BOM) es una forma eficaz de transmitir información de codificación dentro de un documento HTML. Para UTF-8, la BOM es opcional, mientras que es obligatoria para las codificaciones UTF-16 y UTF-32. (Nota: UTF-16 y UTF-32 sin la BOM se conocen formalmente con nombres diferentes, son codificaciones diferentes y, por lo tanto, necesitan algún tipo de declaración de codificación; consulte UTF-16BE , UTF-16LE , UTF-32LE y UTF-32BE ). El uso del carácter BOM (U+FEFF) significa que la codificación se declara automáticamente a cualquier aplicación de procesamiento. Las aplicaciones de procesamiento solo necesitan buscar un 0x0000FEFF, 0xFEFF o 0xEFBBBF inicial en el flujo de bytes para identificar el documento como codificado en UTF-32, UTF-16 o UTF-8 respectivamente. No se requieren mecanismos de metadatos adicionales para estas codificaciones, ya que la marca de orden de bytes incluye toda la información necesaria para las aplicaciones de procesamiento. En la mayoría de las circunstancias, las aplicaciones de edición manejan el carácter de marca de orden de bytes por separado de los otros caracteres, por lo que hay poco riesgo de que un autor elimine o cambie de otro modo la marca de orden de bytes para indicar la codificación incorrecta (como puede suceder cuando la codificación se declara en alfabeto inglés/latino). Si el documento carece de una marca de orden de bytes, el hecho de que el primer carácter imprimible no en blanco en un documento HTML se supone que es "<" (U+003C) se puede utilizar para determinar una codificación UTF-8/UTF-16/UTF-32.

Anulación de codificación

Muchos documentos HTML se entregan con información de codificación inexacta o sin ninguna información de codificación. Para determinar la codificación en tales casos, muchos navegadores permiten al usuario seleccionar manualmente un nombre de codificación de una lista. También pueden emplear un algoritmo de detección automática de codificación que funciona en conjunto con la anulación manual o, en el caso de la lista de materiales y en el caso de HTML entregado como XML  , en contra de la anulación manual.

En el caso de los documentos HTML serializados text/html, la anulación manual puede aplicarse a todos los documentos o solo a aquellos cuya codificación no se puede determinar mediante declaraciones o patrones de bytes. El hecho de que la anulación manual esté presente y se utilice ampliamente dificulta la adopción de declaraciones de codificación precisas en la Web; por lo tanto, es probable que el problema persista. Pero tenga en cuenta que Internet Explorer, Chrome y Safari (tanto para XML como para text/htmlserializaciones) no permiten anular la codificación siempre que la página incluya la lista de materiales. [2]

En el caso de los documentos HTML serializados con la etiqueta XML preferida – application/xhtml+xml, no se permite la anulación manual de la codificación. Anular la codificación de un documento XML de este tipo significaría que el documento dejaría de ser XML, ya que es un error fatal que los documentos XML tengan una declaración de codificación con errores detectables. Actualmente, los navegadores Gecko como Firefox cumplen con esta regla, mientras que la mayoría de los demás navegadores comunes que admiten HTML como XML, como los navegadores Webkit (Chrome/Safari) [3] sí permiten anular manualmente la codificación de documentos XHTML.

Compatibilidad con navegadores web

Muchos navegadores solo pueden mostrar un pequeño subconjunto del repertorio completo de Unicode. A continuación, se muestra cómo su navegador muestra los distintos puntos de código Unicode:

Algunos navegadores web, como Mozilla Firefox , Opera , Safari e Internet Explorer (a partir de la versión 7), pueden mostrar páginas web multilingües eligiendo de forma inteligente una fuente para mostrar cada carácter individual de la página. Mostrarán correctamente cualquier combinación de bloques Unicode , siempre que existan fuentes adecuadas en el sistema operativo .

Los navegadores más antiguos, como Netscape Navigator 4.77 e Internet Explorer 6 , sólo pueden mostrar texto compatible con la fuente actual asociada con la codificación de caracteres de la página, y pueden malinterpretar las referencias de caracteres numéricos como referencias a valores de código dentro de la codificación de caracteres actual, en lugar de referencias a puntos de código Unicode. Cuando se utiliza un navegador de este tipo, es poco probable que el equipo tenga todas esas fuentes, o que el navegador pueda utilizar todas las fuentes disponibles en la misma página. Como resultado, el navegador no mostrará correctamente el texto de los ejemplos anteriores, aunque puede mostrar un subconjunto de ellos. Sin embargo, como están codificados según el estándar, se mostrarán correctamente en cualquier sistema que sea compatible y tenga los caracteres disponibles. Además, es probable que los caracteres a los que se les han dado nombres para su uso en referencias de entidades con nombre estén disponibles con más frecuencia que otros.

Para mostrar caracteres fuera del Plano Multilingüe Básico , como la letra gótica faihu, que es una variante de la letra rúnica fehu en la tabla anterior, algunos sistemas (como Windows 2000) necesitan ajustes manuales de sus configuraciones.

Frecuencia de uso

Según datos internos del índice web de Google , en diciembre de 2007 la codificación Unicode UTF-8 se convirtió en la codificación más utilizada en páginas web, superando tanto a ASCII (EE.UU.) como a 8859-1 / 1252 (Europa occidental). [4]

Véase también

Referencias

  1. ^ Ian Hickson (2011). "HTML5" . Consultado el 17 de septiembre de 2011 . Se recomienda a los autores que utilicen UTF-8. Los verificadores de conformidad pueden recomendar a los autores que no utilicen codificaciones heredadas. [RFC3629] Las herramientas de creación de documentos deberían utilizar UTF-8 de forma predeterminada para los documentos recién creados. [RFC3629]
  2. ^ "12897 – En algunos analizadores, el código fuente UTF-8 prevalece sobre el atributo de conjunto de caracteres HTTP (algoritmo de detección de codificación)". www.w3.org . Consultado el 9 de marzo de 2023 .
  3. ^ "66189 – El analizador XML no emite un ERROR FATAL para todos los errores de codificación detectables". bugs.webkit.org . Consultado el 9 de marzo de 2023 .
  4. ^ "Pasando a Unicode 5.1". Blog oficial de Google . Consultado el 10 de octubre de 2024 .
  • Unicode en XML y otros lenguajes de marcado: una publicación conjunta del W3C y el Consorcio Unicode que describe cuestiones y proporciona directrices relacionadas con Unicode en lenguajes de marcado
  • Definiciones de entidades con nombre de caracteres en latín-1, "especiales" y matemáticos, griegos y simbólicos para HTML 4.01
  • UnicodeMap.org - Busque caracteres Unicode, rangos y otra información
  • Fuentes, editores y documentación gratuitos de SIL
  • Recursos Unicode de Alan Wood: fuentes e información Unicode.
  • http://www.phon.ucl.ac.uk/home/wells/ipa-unicode.htm El Alfabeto Fonético Internacional en Unicode
  • http://www.alanwood.net/unicode/cjk_compatibility_ideographs.html Ideogramas de compatibilidad CJK
  • http://www.unicode.org/charts/ Tablas de caracteres Unicode; solo números hexadecimales; archivos PDF que muestran todos los caracteres independientemente de las capacidades del navegador
  • Tabla de caracteres Unicode del 1 al 65535 Archivado el 3 de noviembre de 2007 en Wayback Machine . Muestra cómo se ven en el navegador.
  • Herramienta web que convierte caracteres "especiales" (como caracteres chinos) en referencias de caracteres numéricos Unicode
  • Páginas web multilingües y Unicode: cómo solucionar problemas de visualización
  • w3.org vía web.archive.org - Referencia de cita HTML5 original guardada a través de Wayback Machine
Retrieved from "https://en.wikipedia.org/w/index.php?title=Unicode_and_HTML&oldid=1250509994"