Codificación Unicode. Unicode: estándar de codificación de caracteres

Dado que en varios sistemas informáticos (por ejemplo, Windows NT) ya se utilizaban caracteres fijos de 16 bits como codificación predeterminada, se decidió codificar todos los caracteres más importantes sólo dentro de las primeras 65.536 posiciones (las llamadas posiciones inglesas). avión multilingüe básico, BMP). El resto del espacio se utiliza para "caracteres adicionales". personajes suplementarios): sistemas de escritura de lenguas extintas o caracteres chinos, símbolos matemáticos y musicales de uso muy raro.

Para compatibilidad con sistemas más antiguos de 16 bits, se inventó el sistema UTF-16, donde las primeras 65.536 posiciones, excluyendo las posiciones en el intervalo U+D800...U+DFFF, se representan directamente como números de 16 bits, y el resto se representan como "pares sustitutos" "(el primer elemento del par del área U+D800...U+DBFF, el segundo elemento del par del área U+DC00...U+DFFF). Para los pares sustitutos, se utilizó parte del espacio de código (2048 posiciones) previamente reservado para “caracteres de uso privado”.

Dado que UTF-16 solo puede mostrar 2 20 + 2 16 −2048 (1 112 064) caracteres, se eligió este número como valor final del espacio de código Unicode.

Aunque el área del código Unicode se extendió más allá de 2 16 ya en la versión 2.0, los primeros caracteres en el área "superior" no se colocaron hasta la versión 3.1.

El papel de esta codificación en el sector web crece constantemente; a principios de 2010, la proporción de sitios web que utilizaban Unicode era de aproximadamente el 50%.

Versiones Unicode

A medida que la tabla de caracteres del sistema Unicode cambia y se repone y se publican nuevas versiones de este sistema, y ​​este trabajo continúa, ya que inicialmente el sistema Unicode incluía solo el Plano 0 (códigos de doble byte), también se publican nuevos documentos ISO. El sistema Unicode existe en un total de las siguientes versiones:

  • 1.1 (corresponde a ISO/IEC 10646-1:), norma 1991-1995.
  • 2.0, 2.1 (la misma norma ISO/IEC 10646-1:1993 más adiciones: “Enmiendas” 1 a 7 y “Corrigentes técnicos” 1 y 2), norma de 1996.
  • 3.0 (estándar ISO/IEC 10646-1:2000), estándar 2000.
  • 3.1 (normas ISO/IEC 10646-1:2000 e ISO/IEC 10646-2:2001), norma 2001.
  • 3.2, norma de 2002.
  • 4.0, estándar.
  • 4.01, estándar.
  • 4.1, estándar.
  • 5.0, estándar.
  • 5.1, estándar.
  • 5.2, estándar.
  • 6.0, estándar.
  • 6.1, estándar.
  • 6.2, estándar.

Espacio de código

Aunque las notaciones UTF-8 y UTF-32 permiten codificar hasta 2,31 (2,147,483,648) posiciones de código, se decidió utilizar solo 1,112,064 por compatibilidad con UTF-16. Sin embargo, incluso esto es más que suficiente: hoy (en la versión 6.0) se utilizan poco menos de 110.000 posiciones de código (109.242 gráficos y 273 otros símbolos).

El espacio de código se divide en 17 aviones 2 16 (65536) caracteres cada uno. El plano de tierra se llama básico, contiene símbolos de las escrituras más utilizadas. El primer plano se utiliza principalmente para escritos históricos, el segundo para caracteres KKY de uso poco frecuente y el tercero está reservado para caracteres chinos arcaicos. Los aviones 15 y 16 están destinados a uso privado.

Para indicar caracteres Unicode, se utiliza una notación como "U+" xxxx"(para códigos 0...FFFF), o "U+ xxxx"(para códigos 10000...FFFFF), o "U+ xxxxxx"(para códigos 100000...10FFFF), donde xxx- dígitos hexadecimales. Por ejemplo, el carácter "I" (U+044F) tiene el código 044F = 1103.

Sistema de codificación

El sistema de codificación universal (Unicode) es un conjunto de caracteres gráficos y un método para codificarlos para el procesamiento informático de datos de texto.

Los símbolos gráficos son símbolos que tienen una imagen visible. Los caracteres gráficos se contrastan con los caracteres de control y los caracteres de formato.

Los símbolos gráficos incluyen los siguientes grupos:

  • letras contenidas en al menos uno de los alfabetos admitidos;
  • números;
  • signos de puntuación;
  • signos especiales (matemáticos, técnicos, ideogramas, etc.);
  • separadores.

Unicode es un sistema de representación lineal de texto. Los caracteres que tienen elementos de superíndice o subíndice adicionales se pueden representar como una secuencia de códigos construidos de acuerdo con ciertas reglas (carácter compuesto) o como un solo carácter (variante monolítica, carácter precompuesto).

Modificando personajes

Representación del símbolo “И” (U+0419) como carácter base “И” (U+0418) y carácter modificante “ ̆” (U+0306)

Los caracteres gráficos en Unicode se dividen en extendidos y no extendidos (sin ancho). Los caracteres no extendidos no ocupan espacio en la línea cuando se muestran. Entre ellos se incluyen, en particular, los acentos y otros signos diacríticos. Tanto los símbolos extendidos como los no extendidos tienen sus propios códigos. Los símbolos extendidos también se denominan símbolos básicos. personajes base), y no extendido - modificante (ing. combinando personajes); Además, estos últimos no pueden reunirse de forma independiente. Por ejemplo, el carácter "á" se puede representar como una secuencia del carácter base "a" (U+0061) y el carácter modificante "́" (U+0301), o como un carácter monolítico "á" (U+ 00C1).

Un tipo especial de caracteres modificadores son los selectores de variantes de estilo. selectores de variación). Sólo afectan a aquellos símbolos para los que se definen dichas variantes. En la versión 5.0, se definen variantes de estilo para varios símbolos matemáticos, para símbolos del alfabeto tradicional mongol y para símbolos de la escritura cuadrada mongol.

Formas de normalización

Dado que los mismos caracteres pueden representarse mediante códigos diferentes, lo que en ocasiones dificulta el procesamiento, existen procesos de normalización diseñados para reducir el texto a una determinada forma estándar.

El estándar Unicode define 4 formas de normalización de texto:

  • La forma de normalización D (NFD) es la descomposición canónica. En el proceso de darle al texto esta forma, todos los caracteres compuestos se reemplazan recursivamente por varios compuestos, de acuerdo con las tablas de descomposición.
  • La forma de normalización de C (NFC) es la descomposición canónica seguida de la composición canónica. Primero, el texto se reduce a la forma D, después de lo cual se realiza una composición canónica: el texto se procesa de principio a fin y se siguen las siguientes reglas:
    • El símbolo S es inicial, si tiene clase de modificación cero en la base de caracteres Unicode.
    • En cualquier secuencia de caracteres que comience con el carácter inicial S, el carácter C está bloqueado de S si y sólo si entre S y C hay algún carácter B que sea el carácter inicial o que tenga la misma o mayor clase de modificación que C. Esto Esta regla se aplica sólo a cadenas que han sufrido descomposición canónica.
    • Primario Un carácter compuesto es aquel que tiene una descomposición canónica en la base de caracteres Unicode (o una descomposición canónica para Hangul y no está incluido en la lista de excepciones).
    • Un carácter X puede ser compuesto primario con un carácter Y si y solo si hay un compuesto primario Z que es canónicamente equivalente a la secuencia .
    • Si el siguiente símbolo C no está bloqueado por el último símbolo base inicial L encontrado y puede combinarse primariamente con éxito con él, entonces L se reemplaza por el compuesto L-C y C se elimina.
  • La forma de normalización KD (NFKD) es una descomposición compatible. Cuando se convierten a esta forma, todos los caracteres constituyentes se reemplazan utilizando mapas de descomposición Unicode canónicos y mapas de descomposición compatibles, y luego el resultado se pone en orden canónico.
  • Forma de normalización KC (NFKC): descomposición compatible seguida de canónico composición.

Los términos "composición" y "descomposición" significan, respectivamente, la conexión o descomposición de símbolos en sus partes componentes.

Ejemplos

Fuente DFN NFC NFKD NFKC
francés franco\u0327ais Fran\xe7ais franco\u0327ais Fran\xe7ais
A, E, J \u0410, \u0401, \u0419 \u0410, \u0415\u0308, \u0418\u0306 \u0410, \u0401, \u0419
\u304b\u3099 \u304c \u304b\u3099 \u304c
Enrique IV Enrique IV Enrique IV Enrique IV Enrique IV
Enrique Ⅳ Enrique\u2163 Enrique\u2163 Enrique IV Enrique IV

Escritura bidireccional

El estándar Unicode admite idiomas escritos en ambas direcciones de escritura de izquierda a derecha. de izquierda a derecha, LTR), y con escritura de derecha a izquierda (inglés. de derecha a izquierda, RTL) - por ejemplo, escritura árabe y hebrea. En ambos casos, los caracteres se almacenan en un orden "natural"; su visualización teniendo en cuenta la dirección de escritura deseada la proporciona la aplicación.

Además, Unicode admite textos combinados que combinan fragmentos con diferentes direcciones de escritura. Esta característica se llama bidireccionalidad(Inglés) texto bidireccional, BiDi). Algunos procesadores de texto livianos (como los que se encuentran en los teléfonos celulares) pueden admitir Unicode pero no la bidireccionalidad. Todos los caracteres Unicode se dividen en varias categorías: los escritos de izquierda a derecha, los escritos de derecha a izquierda y los escritos en cualquier dirección. La última categoría de caracteres (principalmente signos de puntuación) toma la dirección del texto circundante cuando se muestra.

Personajes destacados

Unicode incluye prácticamente todos los scripts modernos, incluidos:

y otros.

Se han agregado muchas escrituras históricas con fines académicos, que incluyen: runas, griego antiguo, jeroglíficos egipcios, cuneiforme, escritura maya y alfabeto etrusco.

Unicode proporciona una amplia gama de símbolos y pictogramas matemáticos y musicales.

Sin embargo, Unicode generalmente no incluye logotipos de empresas y productos, aunque sí aparecen en fuentes (por ejemplo, el logotipo de Apple en MacRoman (0xF0) o el logotipo de Windows en Wingdings (0xFF)). En las fuentes Unicode, los logotipos sólo deben colocarse en el área de caracteres personalizados.

ISO/CEI 10646

El Consorcio Unicode trabaja en estrecha colaboración con el grupo de trabajo ISO/IEC/JTC1/SC2/WG2 que está desarrollando la Norma Internacional 10646 (ISO/IEC 10646). Existe sincronización entre el estándar Unicode e ISO/IEC 10646, aunque cada estándar utiliza su propia terminología y sistema de documentación.

Colaboración entre el Consorcio Unicode y la Organización Internacional de Normalización. Organización Internacional de Normalización, ISO ) comenzó en 1991. En 1993, ISO publicó el estándar DIS 10646.1. Para sincronizarlo, el Consorcio aprobó el estándar Unicode versión 1.1, que incluía caracteres adicionales de DIS 10646.1. Como resultado, los significados de los caracteres codificados en Unicode 1.1 y DIS 10646.1 coincidieron completamente.

Posteriormente continuó la cooperación entre las dos organizaciones. En 2000, el estándar Unicode 3.0 se sincronizó con ISO/IEC 10646-1:2000. La próxima tercera versión de ISO/IEC 10646 se sincronizará con Unicode 4.0. Quizás estas especificaciones incluso se publiquen como un estándar único.

Similar a los formatos UTF-16 y UTF-32 en el estándar Unicode, el estándar ISO/IEC 10646 también tiene dos formas básicas de codificación de caracteres: UCS-2 (2 bytes por carácter, similar a UTF-16) y UCS-4. (4 bytes por carácter, similar a UTF-32). UCS significa multiocteto universal(multibyte) conjunto de caracteres codificados(Inglés) conjunto de caracteres universales codificados en múltiples octetos ). UCS-2 puede considerarse un subconjunto de UTF-16 (UTF-16 sin pares sustitutos) y UCS-4 es sinónimo de UTF-32.

Métodos de presentación

Unicode tiene varias formas de representación. Formato de transformación Unicode, UTF ): UTF-8, UTF-16 (UTF-16BE, UTF-16LE) y UTF-32 (UTF-32BE, UTF-32LE). También se desarrolló una forma de representación UTF-7 para la transmisión a través de canales de siete bits, pero debido a la incompatibilidad con ASCII no se utilizó ampliamente y no está incluida en el estándar. El 1 de abril de 2005 se propusieron dos formas de representación humorística: UTF-9 y UTF-18 (RFC 4042).

Unicode UTF-8: 0x00000000 - 0x0000007F: 0xxxxxxx 0x00000080 - 0x000007FF: 110xxxxx 10xxxxxx 0x00000800 - 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx 0x00010000 - x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Teóricamente posible, pero tampoco incluido en la norma:

0x00200000 - 0x03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 0x04000000 - 0x7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

Aunque UTF-8 permite especificar el mismo carácter de varias formas, sólo la más corta es correcta. Otros formularios deben rechazarse por razones de seguridad.

Orden de bytes

En un flujo de datos UTF-16, el byte alto se puede escribir antes del byte bajo. UTF-16 big-endian), o después del más joven (inglés) UTF-16 little-endian). De manera similar, existen dos opciones para la codificación de cuatro bytes: UTF-32BE y UTF-32LE.

Para determinar el formato de representación Unicode, se escribe una firma al principio del archivo de texto: el carácter U+FEFF (espacio sin separación de ancho cero), también llamado marca de orden de bytes(Inglés) marca de orden de bytes, BOM ). Esto permite diferenciar UTF-16LE y UTF-16BE ya que el carácter U+FFFE no existe. Este método también se utiliza en ocasiones para referirse al formato UTF-8, aunque el concepto de orden de bytes no es aplicable a este formato. Los archivos que siguen esta convención comienzan con las siguientes secuencias de bytes:

UTF-8 EF BB BF UTF-16BE FE FF UTF-16LE FF FE UTF-32BE 00 00 FE FF UTF-32LE FF FE 00 00

Desafortunadamente, este método no distingue de manera confiable entre UTF-16LE y UTF-32LE, ya que Unicode permite el carácter U+0000 (aunque el texto real rara vez comienza con él).

Los archivos codificados en UTF-16 y UTF-32 que no contienen una lista de materiales deben estar en orden de bytes big-endian (unicode.org).

Unicode y codificaciones tradicionales.

La introducción de Unicode provocó un cambio en el enfoque de las codificaciones tradicionales de 8 bits. Si antes la codificación se especificaba mediante la fuente, ahora se especifica mediante una tabla de correspondencia entre la codificación dada y Unicode. De hecho, las codificaciones de 8 bits se han convertido en una forma de representación de un subconjunto de Unicode. Esto ha hecho que sea mucho más fácil crear programas que necesitan trabajar con muchas codificaciones diferentes: ahora, para agregar soporte para otra codificación, solo necesita agregar otra tabla de conversión Unicode.

Además, muchos formatos de datos le permiten insertar cualquier carácter Unicode, incluso si el documento está escrito en la antigua codificación de 8 bits. Por ejemplo, en HTML puedes utilizar códigos con un signo comercial.

Implementaciones

La mayoría de los sistemas operativos modernos ofrecen cierto grado de compatibilidad con Unicode.

Una de las primeras implementaciones comerciales exitosas de Unicode fue el entorno de programación Java. Abandonó fundamentalmente la representación de caracteres de 8 bits en favor de la de 16 bits. La mayoría de los lenguajes de programación ahora admiten cadenas Unicode, aunque su representación puede variar según la implementación.

Métodos de entrada

La consola GNU/Linux también le permite ingresar un carácter Unicode por su código; para hacer esto, el código decimal del carácter debe ingresarse usando los números del bloque de teclado extendido mientras se mantiene presionada la tecla Alt. Puede ingresar caracteres por su código hexadecimal: para hacer esto, debe mantener presionada la tecla AltGr y, para ingresar los números A-F, use las teclas del bloque de teclado extendido desde NumLock hasta Enter (en el sentido de las agujas del reloj). También se admite la entrada de acuerdo con ISO 14755 Para que los métodos anteriores funcionen, debe habilitar el modo Unicode en la consola llamando a unicode_start (1) y seleccionar la fuente adecuada llamando a setfont (8).

La ortografía "Unicode" ya se ha consolidado firmemente en los textos en ruso. Según Yandex, la frecuencia de uso de esta palabra es aproximadamente 11 veces mayor que la de Unicode. Wikipedia utiliza una versión más común.

El sitio web del Consorcio tiene una página especial que analiza los problemas de transmitir la palabra “Unicode” en varios idiomas y sistemas de escritura. Para el alfabeto cirílico ruso, se indica la opción "Unicode".

Los formularios adoptados por organizaciones extranjeras para la traducción al ruso de la palabra "Unicode" son orientativos.

Ver también

  • Proyecto: Introducción de símbolos de los alfabetos de los pueblos de Rusia en Unicode

Notas

  1. Transcripciones Unicode (inglés). Archivado desde el original el 22 de agosto de 2011. Consultado el 10 de mayo de 2010.
  2. Unicode en el diccionario Paratipo
  3. El estándar Unicode®: una introducción técnica. Archivado
  4. Historial de fechas de lanzamiento y publicación de Unicode. Archivado desde el original el 22 de agosto de 2011. Consultado el 4 de julio de 2010.
  5. El Consorcio Unicode. Archivado desde el original el 22 de agosto de 2011. Consultado el 4 de julio de 2010.
  6. Prefacio. Archivado desde el original el 22 de agosto de 2011. Consultado el 4 de julio de 2010.
  7. Estructura General. Archivado desde el original el 22 de agosto de 2011. Consultado el 5 de julio de 2010.
  8. Escrituras alfabéticas europeas. Archivado desde el original el 22 de agosto de 2011. Consultado el 4 de julio de 2010.
  9. Unicódigo 88. Archivado desde el original el 22 de agosto de 2011. Consultado el 8 de julio de 2010.
  10. Unicode y Microsoft Windows NT (inglés). Soporte técnico de Microsoft. Archivado
  11. Unicode se utiliza en casi el 50% de los sitios web (ruso). Archivado desde el original el 22 de agosto de 2011.
  12. Hoja de ruta hacia el TIP (Plano Ideográfico Terciario)
  13. http://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt (inglés)
  14. El caso Unicode no es fácil
  15. La mayoría de las fuentes de PC implementan dígitos monoespaciales "mayúsculas" (mayúsculas).
  16. En algunos casos, un documento (no texto plano) en Unicode puede ocupar mucho menos espacio que un documento con codificación de un solo byte. Por ejemplo, si una determinada página web contiene aproximadamente la misma cantidad de texto en ruso y griego, entonces en una codificación de un solo byte deberá escribir letras en ruso o en griego, utilizando las capacidades del formato del documento, en forma de códigos con un signo comercial, que ocupa de 6 a 7 bytes por carácter (cuando se usan códigos decimales), es decir, en promedio, una letra ocupará de 3,5 a 4 bytes, mientras que UTF-8 ocupa solo 2 bytes por letra griega o rusa.
  17. Uno de los archivos de fuente Arial Unicode tiene un tamaño de 24 megabytes; Existe una Times New Roman que tiene un tamaño de 120 megabytes y contiene cerca de 65.536 caracteres.
  18. Incluso para el teléfono móvil más moderno y caro es difícil asignar 120 MB de memoria para una fuente Unicode completa. En la práctica, rara vez se requiere el uso de fuentes completas.
  19. 350 mil páginas “Unicode” frente a 31 mil páginas “Unicode”.

Campo de golf

  • Sitio oficial del Consorcio Unicode (inglés)
  • Unicódigo en el directorio de enlaces de Open Directory Project (dmoz). (Inglés)
  • ¿Qué es Unicode? (Ruso)
  • Última versión

Unicode es un mundo muy grande y complejo, porque el estándar le permite representar y trabajar en una computadora con todos los scripts principales del mundo. Algunos sistemas de escritura existen desde hace más de mil años y muchos de ellos se desarrollaron casi independientemente unos de otros en diferentes partes del mundo. A la gente se le han ocurrido tantas cosas y, a menudo, son tan diferentes entre sí que combinarlas todas en un solo estándar fue una tarea extremadamente difícil y ambiciosa.

Para comprender verdaderamente Unicode, es necesario tener al menos una comprensión superficial de las características de todos los scripts con los que el estándar le permite trabajar. ¿Pero es esto lo que todo desarrollador necesita? Diremos que no. Para utilizar Unicode para la mayoría de las tareas cotidianas, basta con tener un mínimo razonable de conocimientos y luego profundizar en el estándar según sea necesario.

En este artículo hablaremos sobre los principios básicos de Unicode y resaltaremos aquellas importantes cuestiones prácticas que los desarrolladores seguramente encontrarán en su trabajo diario.

¿Por qué se necesitaba Unicode?

Antes de la llegada de Unicode, se utilizaban casi universalmente codificaciones de un solo byte, en las que la frontera entre los propios caracteres, su representación en la memoria de la computadora y su visualización en la pantalla era bastante arbitraria. Si trabajó con uno u otro idioma nacional, entonces se instalaron las fuentes de codificación correspondientes en su sistema, lo que le permitió dibujar bytes del disco en la pantalla de tal manera que tuvieran sentido para el usuario.

Si imprimió un archivo de texto en una impresora y vio una serie de galimatías incomprensibles en la página de papel, esto significaba que las fuentes apropiadas no estaban cargadas en el dispositivo de impresión y no interpretó los bytes como le gustaría.

Este enfoque en general y las codificaciones de un solo byte en particular tenían una serie de desventajas importantes:

  1. Se pudo trabajar simultáneamente con solo 256 caracteres, estando los primeros 128 reservados para caracteres latinos y de control, y en la segunda mitad, además de los símbolos del alfabeto nacional, fue necesario encontrar un lugar para símbolos pseudográficos ( ╔ ╗).
  2. Las fuentes estaban vinculadas a una codificación específica.
  3. Cada codificación representaba su propio conjunto de caracteres, y la conversión de una a otra sólo era posible con pérdidas parciales, cuando los caracteres faltantes se reemplazaban por otros gráficamente similares.
  4. Transferir archivos entre dispositivos que ejecutaban diferentes sistemas operativos era difícil. Tenías que tener un programa de conversión o llevar fuentes adicionales junto con el archivo. La existencia de Internet tal como la conocemos era imposible.
  5. En el mundo existen sistemas de escritura no alfabéticos (escritura jeroglífica), que en principio no pueden representarse en una codificación de un solo byte.

Principios básicos de Unicode

Todos entendemos perfectamente que una computadora no conoce ninguna entidad ideal, sino que opera con bits y bytes. Pero los sistemas informáticos todavía son creados por personas, no por máquinas, y para usted y para mí a veces es más conveniente operar con conceptos especulativos y luego pasar de lo abstracto a lo concreto.

¡Importante! Uno de los principios centrales de la filosofía Unicode es la clara distinción entre caracteres, su representación en una computadora y su visualización en un dispositivo de salida.

Se introduce el concepto de carácter Unicode abstracto, que existe únicamente en forma de concepto especulativo y acuerdo entre personas, consagrado en el estándar. Cada carácter Unicode está asociado con un número entero no negativo llamado punto de código.

Por ejemplo, el carácter Unicode U+041F es la letra cirílica mayúscula P. Hay varias formas de representar este carácter en la memoria de la computadora, al igual que hay miles de formas de mostrarlo en la pantalla de un monitor. Pero al mismo tiempo P, también será P o U+041F en África.

Se trata de la conocida encapsulación o separación de la interfaz de la implementación, un concepto que ha demostrado su eficacia en programación.

Resulta que, guiado por el estándar, cualquier texto se puede codificar como una secuencia de caracteres Unicode.

Hola U+041F U+0440 U+0438 U+0432 U+0435 U+0442

Escríbelo en una hoja de papel, envuélvelo en un sobre y envíalo a cualquier parte del mundo. Si saben de la existencia de Unicode, percibirán el texto exactamente de la misma manera que usted y yo. No tendrán la menor duda de que el penúltimo carácter es la minúscula cirílica. mi(U+0435), y no decir latín pequeño mi(U+0065). Observe que no hemos dicho una palabra sobre la representación de bytes.

Espacio de código Unicode

El espacio de código Unicode consta de 1.114.112 posiciones de código que van de 0 a 10FFFF. De ellos, sólo a 128.237 se les han asignado valores para la novena versión del estándar. Parte del espacio está reservado para uso privado y el Consorcio Unicode promete no asignar nunca valores a puestos en estas áreas especiales.

Por motivos de comodidad, todo el espacio se divide en 17 planos (actualmente se utilizan seis de ellos). Hasta hace poco, se decía comúnmente que lo más probable es que solo encontrara el plano multilingüe básico (BMP), que incluye caracteres Unicode desde U+0000 hasta U+FFFF. (Mirando un poco hacia el futuro: los caracteres de BMP se representan en UTF-16 con dos bytes, no con cuatro). En 2016, esta tesis ya está en duda. Por ejemplo, es posible que aparezcan caracteres Emoji populares en un mensaje de usuario y usted debe poder procesarlos correctamente.

Codificaciones

Si queremos enviar texto a través de Internet, necesitaremos codificar una secuencia de caracteres Unicode como una secuencia de bytes.

El estándar Unicode incluye una descripción de varias codificaciones Unicode, como UTF-8 y UTF-16BE/UTF-16LE, que permiten codificar todo el espacio de caracteres. La conversión entre estas codificaciones se puede realizar libremente sin pérdida de información.

Además, nadie ha cancelado las codificaciones de un solo byte, pero le permiten codificar su propia parte individual y muy estrecha del espectro Unicode: 256 o menos posiciones de código. Para tales codificaciones, existen tablas disponibles para todos, donde cada valor de un solo byte está asociado con un carácter Unicode (ver, por ejemplo, CP1251.TXT). A pesar de las limitaciones, las codificaciones de un solo byte resultan muy prácticas cuando se trata de trabajar con una gran variedad de información de texto monolingüe.

De las codificaciones Unicode, la más común en Internet es UTF-8 (ganó la palma en 2008), principalmente por su eficiencia y compatibilidad transparente con ASCII de siete bits. Caracteres latinos y de servicio, signos de puntuación básicos y números, es decir, Todos los caracteres ASCII de siete bits están codificados en UTF-8 como un byte, al igual que en ASCII. Los caracteres de muchas escrituras importantes, sin contar algunos caracteres jeroglíficos más raros, están representados en dos o tres bytes. La posición de código más grande definida por el estándar, 10FFFF, está codificada en cuatro bytes.

Tenga en cuenta que UTF-8 es una codificación de longitud de código variable. Cada carácter Unicode que contiene está representado por una secuencia de cuantos de código con una longitud mínima de un cuanto. El número 8 significa la longitud en bits de la unidad de código (unidad de código): 8 bits. Para la familia de codificación UTF-16, el tamaño del cuanto de código es, respectivamente, de 16 bits. Para UTF-32 - 32 bits.

Si envía una página HTML con texto cirílico a través de la red, entonces UTF-8 puede brindarle un beneficio muy significativo, porque Todo el marcado, así como los bloques de JavaScript y CSS, se codificarán efectivamente en un byte. Por ejemplo, la página principal de Habr en UTF-8 ocupa 139Kb, y en UTF-16 ya ocupa 256Kb. A modo de comparación, si utiliza win-1251 con la pérdida de la capacidad de guardar algunos caracteres, el tamaño se reducirá en sólo 11 KB.

Para almacenar información de cadenas en aplicaciones, a menudo se utilizan codificaciones Unicode de 16 bits debido a su simplicidad, así como al hecho de que los caracteres de los principales sistemas de escritura del mundo están codificados en un cuanto de dieciséis bits. Por ejemplo, Java utiliza con éxito UTF-16 para la representación de cadenas internas. El sistema operativo Windows también utiliza UTF-16 internamente.

En cualquier caso, mientras permanezcamos en el espacio Unicode, realmente no importa cómo se almacene la información de cadena dentro de una aplicación individual. Si el formato de almacenamiento interno le permite codificar correctamente todas las más de un millón de posiciones de código y no hay pérdida de información en el límite de la aplicación, por ejemplo al leer un archivo o copiarlo al portapapeles, entonces todo está bien.

Para interpretar correctamente el texto leído desde un disco o desde un socket de red, primero debe determinar su codificación. Esto se hace utilizando metainformación proporcionada por el usuario, escrita en el texto o junto a él, o determinada heurísticamente.

En pocas palabras

Hay mucha información y tiene sentido dar un breve resumen de todo lo escrito anteriormente:

  • Unicode postula una distinción clara entre caracteres, su representación en una computadora y su visualización en un dispositivo de salida.
  • El espacio de código Unicode consta de 1.114.112 posiciones de código que van de 0 a 10FFFF.
  • El plano multilingüe básico incluye caracteres Unicode U+0000 a U+FFFF, que están codificados en UTF-16 como dos bytes.
  • Cualquier codificación Unicode le permite codificar todo el espacio de posiciones del código Unicode, y la conversión entre diferentes codificaciones se realiza sin pérdida de información.
  • Las codificaciones de un solo byte permiten codificar solo una pequeña parte del espectro Unicode, pero pueden resultar útiles cuando se trabaja con grandes cantidades de información monolingüe.
  • Las codificaciones UTF-8 y UTF-16 tienen longitudes de código variables. En UTF-8, cada carácter Unicode se puede codificar en uno, dos, tres o cuatro bytes. En UTF-16: dos o cuatro bytes.
  • El formato interno para almacenar información de texto dentro de una aplicación separada puede ser arbitrario, siempre que funcione correctamente con todo el espacio de posiciones del código Unicode y no haya pérdidas durante la transferencia de datos transfronteriza.

Una nota rápida sobre la codificación

Puede haber cierta confusión con el término codificación. Dentro de Unicode, la codificación se produce dos veces. La primera vez que se codifica un conjunto de caracteres Unicode, en el sentido de que a cada carácter Unicode se le asigna una posición de código correspondiente. Este proceso convierte el juego de caracteres Unicode en un juego de caracteres codificados. La segunda vez, la secuencia de caracteres Unicode se convierte en una cadena de bytes y este proceso también se denomina codificación.

En la terminología inglesa, hay dos verbos diferentes, codificar y codificar, pero incluso los hablantes nativos a menudo se confunden con ellos. Además, el término juego de caracteres o juego de caracteres se utiliza como sinónimo del término juego de caracteres codificados.

Todo esto lo decimos porque tiene sentido prestar atención al contexto y distinguir entre situaciones cuando hablamos de la posición del código de un carácter Unicode abstracto y cuando hablamos de su representación en bytes.

En conclusión

Hay tantos aspectos diferentes de Unicode que es imposible cubrirlos todos en un solo artículo. Y es innecesario. La información anterior es suficiente para evitar confusiones en los principios básicos y trabajar con texto en la mayoría de las tareas cotidianas (léase: sin ir más allá del BMP). En los siguientes artículos hablaremos sobre la normalización, daremos una descripción histórica más completa del desarrollo de las codificaciones, hablaremos sobre los problemas de la terminología Unicode en ruso y también publicaremos material sobre los aspectos prácticos del uso de UTF-8 y UTF-16. .

El texto mecanografiado consta de caracteres impresos: símbolos gráficos.
Los símbolos gráficos son símbolos que tienen una visualización visible en el texto.
Todos los símbolos gráficos se recopilan en un conjunto de un único sistema Unicode universal.
Insertar un símbolo gráfico Unicode en un documento html
- el principal y único propósito de esta tabla.

Puede insertar un símbolo en un documento HTML de una de las siguientes maneras:

  1. copie la imagen del símbolo desde la ventana del navegador a la ventana de su editor visual html
  2. copie el código html del símbolo directamente en el código del documento html
Por favor, comprenda que estos son dos métodos diferentes:
  1. insertar visual en visual
  2. insertar código en el código.

La fuente de un símbolo, su tamaño y color en HTML se pueden configurar con código como:
CÓDIGO_CARACTER
Dónde,
Arial - fuente,
10px: tamaño de fuente en píxeles,
#ff0000 - código de color de fuente (rojo)

Por ejemplo:
☎ - tamaño de fuente de caracteres 30px,
☎ - tamaño de fuente del símbolo 30px, color - rojo
☎ - tamaño de fuente de caracteres 20px,
☎ - tamaño de fuente del símbolo 10px.
Nota Las fuentes recomendadas para insertar caracteres especiales son Arial, Verdana y Tahoma. Estas fuentes muestran caracteres Unicode correctamente y, a su vez, son compatibles correctamente con las aplicaciones web.

  1. "Símbolo"
    (visualización de símbolos visibles)
    Desde esta columna puede copiar la imagen del símbolo y pegarla en la ventana del editor de texto HTML. El símbolo se copiará con un tamaño de fuente de 20px. Una vez completada la copia, puede que sea necesario ajustar individualmente el tamaño de fuente directamente al carácter copiado.
  2. "Nombre"
    (solo para personajes importantes o poco claros)
    Explicación de la finalidad del símbolo, su alcance, ejemplos...
  3. "Mnemotécnica"
    Un mnemotécnico es una construcción alfabética de la forma ", que denota el código alfabético de un carácter en HTML. Se inserta directamente en el código html de un documento html. Los mnemotécnicos son muy populares entre los diseñadores de diseño profesionales. Son perfectamente memorizados por humanos y son compatibles con todas las aplicaciones html. Cada mnemónico contiene un nombre alfabético (designación) de su símbolo y un signo de servicio (&), que sirve como señal para que el navegador lea el código y no se muestra en la pantalla del monitor. de cada mnemotécnico es único y fácil de leer, porque se deriva de la palabra inglesa que caracteriza al símbolo.

    Mnemónicos (griego): el arte de recordar algo. Los mnemónicos se utilizan para facilitar la percepción de información difícil de memorizar cuando el objeto de memorización entra en un estado asociativo con algo.

  4. "Código"
    Código: el código decimal numérico de un carácter en HTML, como &. Insertado directamente en el código html de un documento html. El código decimal consta de un número que indica el número de serie del carácter en el sistema Unicode y varios caracteres de servicio (& y #), que sirven como señal para que el navegador lea el código y no se muestran en la pantalla del monitor. El código decimal numérico es muy utilizado y utilizado debido a su versatilidad y facilidad de percepción.

Caracteres de control en HTML (XHTML)

Los caracteres de control en HTML (XHTML) son caracteres de servicio del lenguaje HTML que se utilizan en el diseño HTML de una página web. Cualquier navegador debe admitir estos caracteres, ya que sin ellos es imposible mostrar correctamente el texto HTML. Los caracteres de control no se muestran en el texto y, cuando se ingresan directamente desde el teclado, el navegador los interpreta como signos de puntuación que requieren la realización de alguna acción cuando la página se dibuja en la pantalla.

Está permitido utilizar caracteres de control en textos ordinarios, donde simbolizan conceptos universales y el navegador los interpreta como caracteres tipográficos ordinarios. Al utilizar símbolos de servicio en textos HTML de esta manera, no es necesario introducir el valor del símbolo en sí, sino su código HTML. Porque, repito, de lo contrario el navegador percibirá el símbolo del servicio como una llamada a la acción y no mostrará correctamente el texto HTML en la pantalla del monitor.

Los símbolos de control y su código HTML son conocidos y comprendidos por todos los navegadores sin excepción, lo que no se puede decir, lamentablemente, de otros símbolos que pueden mostrarse incorrectamente en diferentes navegadores o, peor aún, no mostrarse en absoluto.

Sintaxis y puntuación

espacio de longitud N (espacio regular)
espacio de longitud M (espacio largo)
- guión suave (carácter no imprimible) - ­
guión –
- guión de longitud N (guión normal) -
guión de longitud M (em guión)
. punto .
, coma ,
elipsis …
: colon :
; punto y coma ;
! signo de admiración !
ǃ
? signo de interrogación ?
@ "perro" @
* "estrella" *
# "enrejado" #
cita única superior izquierda ‘
cita única superior derecha ’
cita única inferior derecha ‚
cita doble arriba a la izquierda “
doble cita superior derecha ”
doble cita inferior derecha &bdquo „
« comillas dobles en la esquina izquierda (ruso) « «
» comillas dobles en la esquina derecha (ruso) » »
́ acento, ejemplo: Vasya ́
" apóstrofo, ejemplo: tú"yo "
´ agudo, ejemplo: Vasya ´ ´
párrafo (carácter no imprimible)
§ párrafo § §
ˆ acento (pájaro invertido) ˆ ˆ
ˆ
˜ tilde pequeña ˜ ˜
˜
¦ línea punteada vertical ¦ ¦
( paréntesis izquierdo (
) paréntesis derecho )
soporte de ángulo izquierdo
soporte de ángulo recto
soporte en ángulo izquierdo, opción
soporte en ángulo recto, opción
[ corchete izquierdo [
] corchete derecho ]
/ barra diagonal - carácter de barra diagonal /
\ barra invertida \
barra diagonal (signo de división)
ǀ barra vertical ǀ
ǁ doble barra vertical ǁ
superposición, ejemplo: Vasya‾vasya
¯ macron, ejemplo: Vasya¯vasya ¯ ¯

Marcas y moneda

+ más + +
menos -
= es igual =
± más o menos ± ±
× signo de multiplicación × ×
÷ signo de división ÷ ÷
operador de punto (en medio de la línea) ·
operador de asterisco (en medio de la línea)
operador de tilde
. marcador de lista (en medio de la línea) . •
¹ superíndice "1" ¹ ¹
² superíndice "2" ² ²
³ superíndice "3" ³ ³
Superíndice y subíndice en HTML (XHTML)
se puede insertar usando etiquetas Y , respectivamente:
NÚMERO Sobrescrito→ NÚMERO Superíndice
NÚMERO Subíndice→ NÚMERO Subíndice
½ fracción "la mitad" ½ ½
fracción "un tercio"
¼ fracción "un cuarto" ¼ ¼
¾ fracción "tres cuartos" ¾ ¾
signo de número
% por ciento %
ppm ‰
° grados ° °
prime (minutos, pies)
doble prima (segundos, pulgadas)
Ejemplo 1: 30° 25′ 12″
Ejemplo 2: 25′ 12
µ micro µ µ
π Pi π π
ƒ signo de función
(no confundir con "integral")
ƒ ƒ
ƒ
integral
cero cruzado, conjunto vacío
(no confundir con "diámetro")
diámetro (no confundir con la “o” latina tachada)
ø "o" latina tachada en diagonal ø ø
Ø "O" mayúscula latina tachada en diagonal Ø Ø
marca de trabajo
signo de suma
radical
(raíz cuadrada o raíz x)
proporcionalmente
infinidad
esquina
ortogonal (perpendicular)
firmar "por lo tanto"
aproximadamente igual
casi igual
no igual
idénticamente
menor o igual a
mayor o igual a
lógico Y
O lógico
signo más en un círculo
(cantidad directa)
signo de multiplicación en un círculo
(producto cruzado, flecha del observador)
ʘ punto en un círculo
(flecha al observador)
ʘ

✵ ✵

Cada usuario de Internet, al intentar configurar una u otra de sus funciones, vio al menos una vez la palabra "Unicode" escrita en la pantalla. Descubrirás qué es leyendo este artículo.

Definición

Unicode es un estándar de codificación de caracteres. Fue propuesto por la organización sin fines de lucro Unicode Inc. en 1991. El estándar fue desarrollado con el objetivo de combinar tantos tipos diferentes de caracteres como sea posible en un solo documento. La página que se crea sobre esta base puede contener letras y jeroglíficos de diferentes idiomas (desde el ruso hasta el coreano) y símbolos matemáticos. En este caso, todos los caracteres de esta codificación se muestran sin problemas.

Razones de la creación

Érase una vez, mucho antes de la llegada del sistema unificado Unicode, la codificación se elegía en función de las preferencias del autor del documento. Por esta razón, a menudo era necesario utilizar diferentes tablas para leer un documento. A veces era necesario hacerlo varias veces, lo que hacía la vida mucho más difícil para el usuario medio. Como ya se mencionó, la solución a este problema fue propuesta en 1991 por la organización sin fines de lucro Unicode Inc., que propuso un nuevo tipo de codificación de caracteres. Su objetivo era unir normas obsoletas y diversas. “Unicode” es una codificación que permitió lograr lo impensable en ese momento: crear una herramienta que admita una gran cantidad de caracteres. El resultado superó muchas expectativas: aparecieron documentos que contenían simultáneamente textos en inglés y ruso, expresiones latinas y matemáticas.

Pero la creación de una codificación unificada fue precedida por la necesidad de resolver una serie de problemas que surgieron debido a la enorme variedad de estándares que ya existían en ese momento. Los más comunes de ellos:

  • escritos élficos, o “krakozyabry”;
  • conjunto de caracteres limitado;
  • problema de conversión de codificación;
  • duplicación de fuentes.

Una breve excursión histórica.

Imagínate que son los años 80. La tecnología informática aún no está tan extendida y tiene un aspecto diferente al actual. En ese momento, cada sistema operativo era único a su manera y cada entusiasta lo modificaba para necesidades específicas. La necesidad de intercambiar información se convierte en un refinamiento adicional de todo. Al intentar leer un documento creado con otro sistema operativo, a menudo aparece en la pantalla un conjunto de caracteres incomprensibles y comienzan los juegos con la codificación. No siempre es posible hacerlo rápidamente y, a veces, el documento necesario se puede abrir en seis meses o incluso más tarde. Las personas que intercambian información frecuentemente crean ellos mismos tablas de conversión. Y trabajar en ellos revela un detalle interesante: deben crearse en dos direcciones: “del mío al tuyo” y viceversa. La máquina no puede hacer una inversión banal de cálculos; para ello, la fuente está en la columna de la derecha y el resultado en la izquierda, pero no al revés. Si era necesario utilizar caracteres especiales en un documento, primero había que agregarlos y luego explicarle al socio lo que tenía que hacer para que estos caracteres no se convirtieran en "locuras". Y no olvidemos que para cada codificación tuvimos que desarrollar o implementar nuestras propias fuentes, lo que llevó a la creación de una gran cantidad de duplicados en el sistema operativo.

Imagine que en la página de fuentes verá 10 piezas de Times New Roman idénticas con notas pequeñas: para UTF-8, UTF-16, ANSI, UCS-2. ¿Entiende ahora que el desarrollo de una norma universal era una necesidad urgente?

"Padres creadores"

Los orígenes de Unicode se remontan a 1987, cuando Joe Becker de Xerox, junto con Lee Collins y Mark Davis de Apple, comenzaron a investigar la creación práctica de un conjunto de caracteres universal. En agosto de 1988, Joe Becker publicó un borrador de propuesta para un sistema de codificación multilingüe internacional de 16 bits.

Unos meses más tarde, el Grupo de Trabajo Unicode se amplió para incluir a Ken Whistler y Mike Kernegan de RLG, Glenn Wright de Sun Microsystems y varios otros, completando el trabajo preliminar sobre un único estándar de codificación.

Descripción general

Unicode se basa en el concepto de carácter. Esta definición se refiere a un fenómeno abstracto que existe en un tipo específico de escritura y se realiza a través de grafemas (sus “retratos”). Cada carácter se especifica en Unicode mediante un código único que pertenece a un bloque específico del estándar. Por ejemplo, el grafema B está tanto en el alfabeto inglés como en el ruso, pero en Unicode corresponde a 2 caracteres diferentes. Se les aplica una transformación, es decir, cada uno de ellos se describe mediante una clave de base de datos, un conjunto de propiedades y un nombre completo.

Ventajas de Unicode

La codificación Unicode se diferenciaba de otras contemporáneas por su enorme oferta de caracteres para "cifrar" caracteres. El caso es que sus antecesores tenían 8 bits, es decir, soportaban 28 caracteres, pero el nuevo desarrollo ya contaba con 216 caracteres, lo que supuso un paso de gigante. Esto hizo posible codificar casi todos los alfabetos existentes y extendidos.

Con la llegada de Unicode, ya no era necesario utilizar tablas de conversión: como estándar único, simplemente anulaba su necesidad. De la misma manera, "krakozyabry" también cayó en el olvido: un estándar único los hizo imposibles y eliminó la necesidad de crear fuentes duplicadas.

Desarrollo de Unicode

Por supuesto, el progreso no se detiene y han pasado 25 años desde la primera presentación. Sin embargo, la codificación Unicode mantiene obstinadamente su posición en el mundo. Esto fue posible en gran medida gracias a que se volvió fácil de implementar y se generalizó, siendo reconocido por los desarrolladores de software propietario (de pago) y de código abierto.

Sin embargo, no debemos dar por sentado que hoy disponemos de la misma codificación Unicode que hace un cuarto de siglo. Por el momento, su versión ha cambiado a 5.x.x y el número de caracteres codificados ha aumentado a 231. Se abandonó la posibilidad de utilizar una mayor cantidad de caracteres para seguir manteniendo el soporte para Unicode-16 (codificaciones donde el máximo el número se limitó a 216). Desde el momento de su aparición hasta la versión 2.0.0, el “Estándar Unicode” aumentó casi 2 veces el número de caracteres que incluía. El crecimiento de las oportunidades continuó en los años siguientes. En la versión 4.0.0 ya era necesario aumentar el estándar, lo cual se hizo. Como resultado, Unicode adquirió la forma en que lo conocemos hoy.

¿Qué más hay en Unicode?

Además del enorme número de símbolos en constante crecimiento, tiene otra característica útil. Estamos hablando de la llamada normalización. En lugar de revisar todo el documento carácter por carácter y sustituir los iconos apropiados de una tabla de búsqueda, se utiliza uno de los algoritmos de normalización existentes. ¿De qué estamos hablando?

En lugar de desperdiciar recursos informáticos comprobando periódicamente el mismo carácter, que puede ser similar en diferentes alfabetos, se utiliza un algoritmo especial. Le permite colocar símbolos similares en una columna separada de la tabla de sustitución y consultarlos en lugar de volver a verificar todos los datos una y otra vez.

Se han desarrollado e implementado cuatro de estos algoritmos. En cada uno de ellos, la transformación se produce según un principio estrictamente definido, diferente a los demás, por lo que no es posible nombrar ninguno de ellos como el más eficaz. Cada uno fue desarrollado para necesidades específicas, fue implementado y utilizado con éxito.

Difusión de la norma

A lo largo de 25 años de historia, la codificación Unicode probablemente se ha convertido en la más extendida en el mundo. Los programas y páginas web también se ajustan a este estándar. La amplitud de la aplicación puede evidenciarse por el hecho de que hoy en día Unicode es utilizado por más del 60% de los recursos de Internet.

Ahora sabes cuándo apareció el estándar Unicode. También sabrás qué es y podrás apreciar todo el significado del invento realizado por un grupo de especialistas de Unicode Inc. hace más de 25 años.

Unicódigo

Material de Wikipedia: la enciclopedia libre

Ir a: navegación, buscar

Unicódigo (más a menudo) o Unicódigo (Inglés Unicódigo) - estándar codificación de caracteres, permitiéndole representar los signos de casi todos los escritos. idiomas.

Norma propuesta en 1991 organización sin fines de lucro "Consorcio Unicode" ( Inglés Unicódigo Consorcio, Unicódigo . ). El uso de este estándar permite codificar una gran cantidad de caracteres de diferentes escrituras: el chino puede coexistir en documentos Unicode jeroglíficos, símbolos matemáticos, letras alfabeto griego, alfabeto latino Y alfabeto cirílico, en este caso el cambio se vuelve innecesario páginas de códigos.

El estándar consta de dos secciones principales: el juego de caracteres universal ( Inglés UCS, juego de caracteres universal) y familia de codificación ( Inglés. UTF, formato de transformación Unicode). El juego de caracteres universal especifica la coincidencia de caracteres uno a uno. códigos- elementos del espacio de código que representan números enteros no negativos. Una familia de codificación define la representación mecánica de una secuencia de códigos UCS.

Los códigos del estándar Unicode se dividen en varias áreas. Los códigos de área U+0000 a U+007F contienen caracteres de marcación. ASCII con los códigos correspondientes. A continuación se encuentran áreas de caracteres de diversas escrituras, signos de puntuación y símbolos técnicos. Algunos códigos están reservados para uso futuro. Las áreas de caracteres con códigos de U+0400 a U+052F, de U+2DE0 a U+2DFF, de U+A640 a U+A69F están asignadas para caracteres cirílicos (ver. Cirílico en Unicode).

    1 Requisitos previos para la creación y desarrollo de Unicode

    2 versiones Unicode

    3 espacio de código

    4 sistema de codificación

    5 Modificar símbolos

    6 formas de normalización

    • 6.1 Ejemplos

    7 escritura bidireccional

    8 personajes destacados

    9 ISO/CEI 10646

    10 métodos de presentación

    • 10.1 UTF-8

      10.2 Orden de bytes

      10.3 Unicode y codificaciones tradicionales

      10.4 Implementaciones

    11 métodos de entrada

    • 11.1Microsoft Windows

      11.2 Macintosh

      11.3 GNU/Linux

    12 problemas de Unicode

    13 ¿"Unicode" o "Unicode"?

    14 Véase también

Requisitos previos para la creación y desarrollo de Unicode

Hacia el final década de 1980 Los caracteres de 8 bits se convirtieron en el estándar, mientras que había muchas codificaciones de 8 bits diferentes y constantemente aparecían otras nuevas. Esto se explica tanto por la constante expansión de la gama de idiomas soportados como por el deseo de crear una codificación que sea parcialmente compatible con alguna otra (un ejemplo típico es la aparición codificación alternativa para el idioma ruso, debido al uso de programas occidentales creados para codificar CP437). Esto resultó en varios problemas:

    Problema " krakozyabr"(mostrando documentos con codificación incorrecta): podría resolverse mediante la implementación coherente de métodos para especificar la codificación utilizada o introduciendo una codificación única para todos.

    Problema de limitación del juego de caracteres: podría resolverse cambiando las fuentes dentro del documento o introduciendo una codificación "amplia". El cambio de fuentes se practica desde hace mucho tiempo en procesadores de texto, y se usaban a menudo fuentes con codificación no estándar, llamado “fuentes dingbat”: como resultado, al intentar transferir un documento a otro sistema, todos los caracteres no estándar se convertían en un galimatías.

    El problema de convertir una codificación a otra: podría resolverse compilando tablas de conversión para cada par de codificaciones o utilizando una conversión intermedia a una tercera codificación que incluyera todos los caracteres de todas las codificaciones.

    El problema de la duplicación de fuentes: tradicionalmente, cada codificación tenía su propia fuente, incluso si estas codificaciones coincidían parcial (o completamente) en el conjunto de caracteres: este problema podría resolverse haciendo fuentes "grandes", a partir de las cuales se pudieran obtener los caracteres necesarios para una Luego se seleccionaron las codificaciones dadas; sin embargo, esto requiere la creación de un registro unificado de símbolos para determinar qué corresponde a qué.

Se consideró necesario crear una codificación única “amplia”. Las codificaciones de ancho variable, ampliamente utilizadas en el este de Asia, se consideraron demasiado difíciles de usar, por lo que se decidió utilizar caracteres de ancho fijo. Usar caracteres de 32 bits parecía un desperdicio, por lo que se decidió utilizar caracteres de 16 bits.

Así, la primera versión de Unicode tenía una codificación de caracteres fija de 16 bits, por lo que el número total de códigos fue 2·16 (65.536). De aquí proviene la práctica de indicar caracteres con cuatro dígitos hexadecimales (por ejemplo, U+04F0). Al mismo tiempo, se planeó codificar no todos los caracteres existentes en Unicode, sino solo aquellos que son necesarios en el uso diario. Los símbolos poco utilizados debían colocarse en el "área de uso privado", que originalmente ocupaba los códigos U+D800...U+F8FF. Para utilizar Unicode también como enlace intermedio al convertir diferentes codificaciones entre sí, incluyó todos los caracteres representados en todas las codificaciones más conocidas.

Más tarde, sin embargo, se decidió codificar todos los caracteres y, por tanto, ampliar significativamente el área de código. Al mismo tiempo, los códigos de caracteres comenzaron a verse no como valores de 16 bits, sino como números abstractos que pueden representarse en una computadora de muchas maneras diferentes (ver. Métodos de presentación).

Dado que en varios sistemas informáticos (por ejemplo, WindowsNT ) ya se utilizaban caracteres fijos de 16 bits como codificación predeterminada, se decidió codificar todos los caracteres más importantes sólo dentro de las primeras 65.536 posiciones (las llamadas Inglés básico plurilingüe avión, BMP). El resto del espacio se utiliza para "caracteres adicionales" ( Inglés suplementario personajes): sistemas de escritura de lenguas extintas o de uso muy poco frecuente Chino jeroglíficos, símbolos matemáticos y musicales.

Para ser compatible con sistemas antiguos de 16 bits, se inventó un sistema UTF-16, donde las primeras 65.536 posiciones, excluyendo las posiciones en el rango U+D800...U+DFFF, se representan directamente como números de 16 bits, y el resto se representan como "pares sustitutos" (el primer elemento del par del rango U+D800...U+DBFF , el segundo elemento del par de la región U+DC00…U+DFFF). Para los pares sustitutos, se utilizó parte del espacio de código (2048 posiciones) previamente reservado para “caracteres de uso privado”.

Dado que UTF-16 solo puede mostrar 2 20 + 2 16 −2048 (1 112 064) caracteres, se eligió este número como valor final del espacio de código Unicode.

Aunque el área del código Unicode se extendió más allá de 2 16 ya en la versión 2.0, los primeros caracteres en el área "superior" no se colocaron hasta la versión 3.1.

El papel de esta codificación en el sector web crece constantemente; a principios de 2010, la proporción de sitios web que utilizaban Unicode era de aproximadamente el 50%.

Versiones Unicode

A medida que la tabla de caracteres del sistema Unicode cambia y se repone y se publican nuevas versiones de este sistema, y ​​este trabajo continúa, ya que inicialmente el sistema Unicode incluía solo el Plano 0 (códigos de doble byte), también se publican nuevos documentos. ISO. El sistema Unicode existe en un total de las siguientes versiones:

    1.1 (cumple con la norma ISO/IEC 10646-1: 1993 ), norma 1991-1995.

    2.0, 2.1 (la misma norma ISO/IEC 10646-1:1993 más adiciones: “Enmiendas” 1 a 7 y “Corrigentes técnicos” 1 y 2), norma de 1996.

    3.0 (estándar ISO/IEC 10646-1:2000), estándar 2000.

    3.1 (normas ISO/IEC 10646-1:2000 e ISO/IEC 10646-2:2001), norma 2001.

    estándar 3.2 2002.

    4.0, estándar 2003 .

    4.01, estándar 2004 .

    estándar 4.1 2005 .

    5.0, estándar 2006 .

    estándar 5.1 2008 .

    estándar 5.2 2009 .

    6.0, estándar 2010 .

    estándar 6.1 2012 .

    estándar 6.2 2012 .

Espacio de código

Aunque las notaciones UTF-8 y UTF-32 permiten codificar hasta 2,31 (2,147,483,648) posiciones de código, se decidió utilizar solo 1,112,064 por compatibilidad con UTF-16. Sin embargo, incluso esto es más que suficiente por el momento: la versión 6.0 utiliza poco menos de 110.000 posiciones de código (109.242 gráficos y 273 otros símbolos).

El espacio de código se divide en 17 aviones 2 16 (65536) caracteres cada uno. El plano de tierra se llama básico, contiene símbolos de las escrituras más utilizadas. El primer plano se utiliza principalmente para escritos históricos, el segundo, para jeroglíficos de uso poco frecuente. KKYA, el tercero está reservado para caracteres chinos arcaicos . Los aviones 15 y 16 están destinados a uso privado.

Para indicar caracteres Unicode, se utiliza una notación como "U+" xxxx"(para códigos 0...FFFF), o "U+ xxxx"(para códigos 10000...FFFFF), o "U+ xxxxxx"(para códigos 100000...10FFFF), donde xxx - hexadecimal números. Por ejemplo, el carácter "I" (U+044F) tiene el código 044F 16 = 1103 10 .

Sistema de codificación

El Sistema de Codificación Universal (Unicode) es un conjunto de caracteres gráficos y una forma de codificarlos para computadora procesamiento de datos de texto.

Los símbolos gráficos son símbolos que tienen una imagen visible. Los caracteres gráficos se contrastan con los caracteres de control y los caracteres de formato.

Los símbolos gráficos incluyen los siguientes grupos:

  • signos de puntuación;

    caracteres especiales ( matemático, técnico, ideogramas etc.);

    separadores.

Unicode es un sistema de representación lineal de texto. Los caracteres que tienen elementos de superíndice o subíndice adicionales se pueden representar como una secuencia de códigos construidos de acuerdo con ciertas reglas (carácter compuesto) o como un solo carácter (variante monolítica, carácter precompuesto).

Modificando personajes

Representación del símbolo “И” (U+0419) como carácter base “И” (U+0418) y carácter modificante “ ̆” (U+0306)

Los caracteres gráficos en Unicode se dividen en extendidos y no extendidos (sin ancho). Cuando se muestran, los caracteres no extendidos no ocupan espacio en línea. Entre ellos se incluyen, en particular, los acentos y otros signos diacríticos. Tanto los símbolos extendidos como los no extendidos tienen sus propios códigos. Los símbolos extendidos también se denominan símbolos básicos ( Inglés base personajes), y no extendidos - modificando ( Inglés combinatorio personajes); Además, estos últimos no pueden reunirse de forma independiente. Por ejemplo, el carácter "á" se puede representar como una secuencia del carácter base "a" (U+0061) y el carácter modificante "́" (U+0301), o como un carácter monolítico "á" (U+ 00C1).

Un tipo especial de caracteres modificadores son los selectores de variantes de estilo ( Inglés variación selectores). Sólo afectan a aquellos símbolos para los que se definen dichas variantes. En la versión 5.0, se definen opciones de estilo para varios símbolos matemáticos, para símbolos tradicionales alfabeto mongol y para personajes Letra cuadrada mongol.

Formas de normalización

Dado que los mismos caracteres pueden representarse mediante códigos diferentes, lo que en ocasiones dificulta el procesamiento, existen procesos de normalización diseñados para reducir el texto a una determinada forma estándar.

El estándar Unicode define 4 formas de normalización de texto:

    La forma de normalización D (NFD) es la descomposición canónica. En el proceso de darle al texto esta forma, todos los caracteres compuestos se reemplazan recursivamente por varios compuestos, de acuerdo con las tablas de descomposición.

    La forma de normalización de C (NFC) es la descomposición canónica seguida de la composición canónica. Primero, el texto se reduce a la forma D, después de lo cual se realiza una composición canónica: el texto se procesa de principio a fin y se siguen las siguientes reglas:

    • El símbolo S es inicial, si tiene clase de modificación cero en la base de caracteres Unicode.

      En cualquier secuencia de caracteres que comience con el carácter inicial S, el carácter C está bloqueado de S si y sólo si entre S y C hay algún carácter B que sea el carácter inicial o que tenga la misma o mayor clase de modificación que C. Esto Esta regla se aplica sólo a cadenas que han sufrido descomposición canónica.

      Primario Un compuesto es un carácter que tiene una descomposición canónica en la base de caracteres Unicode (o una descomposición canónica para Hangul y él no está incluido en lista de excepciones).

      Un carácter X puede ser compuesto primario con un carácter Y si y solo si hay un compuesto primario Z que es canónicamente equivalente a la secuencia .

      Si el siguiente símbolo C no está bloqueado por el último símbolo base inicial L encontrado y puede combinarse primariamente con éxito con él, entonces L se reemplaza por un compuesto L-C y C se elimina.

    La forma de normalización KD (NFKD) es una descomposición compatible. Cuando se convierten a esta forma, todos los caracteres constituyentes se reemplazan utilizando mapas de descomposición Unicode canónicos y mapas de descomposición compatibles, y luego el resultado se pone en orden canónico.

    Forma de normalización KC (NFKC): descomposición compatible seguida de canónico composición.

Los términos "composición" y "descomposición" significan, respectivamente, la conexión o descomposición de símbolos en sus partes componentes.

Ejemplos

Texto fuente

\u0410, \u0401, \u0419

\u0410, \u0415\u0308, \u0418\u0306

\u0410, \u0401, \u0419

Escritura bidireccional

El estándar Unicode admite idiomas escritos en ambas direcciones de escritura de izquierda a derecha ( Inglés izquierda- a- bien, LTR), y con escritura de derecha a izquierda ( Inglés bien- a- izquierda, RTL) - Por ejemplo, árabe Y judío carta. En ambos casos, los caracteres se almacenan en un orden "natural"; su visualización teniendo en cuenta la dirección de escritura deseada la proporciona la aplicación.

Además, Unicode admite textos combinados que combinan fragmentos con diferentes direcciones de escritura. Esta característica se llama bidireccionalidad (Inglés bidireccional texto, bidi). Algunos procesadores de texto livianos (como los que se encuentran en los teléfonos celulares) pueden admitir Unicode pero no la bidireccionalidad. Todos los caracteres Unicode se dividen en varias categorías: los escritos de izquierda a derecha, los escritos de derecha a izquierda y los escritos en cualquier dirección. Los símbolos de la última categoría (principalmente signos de puntuación) cuando se muestra, toma la dirección del texto circundante.

Personajes destacados

Artículo principal: Caracteres representados en Unicode

Diagrama del plano de referencia Unicode, ver descripción

Unicode incluye casi todos los modernos. escribiendo, incluido:

    árabe,

    armenio,

    bengalí,

    birmano,

    glagolítico,

    Griego,

    georgiano,

    Devanagari,

    judío,

    alfabeto cirílico,

    Chino(Los caracteres chinos se utilizan activamente en japonés, y también muy raramente en coreano),

    copto,

    jemer,

    latín,

    Tamil,

    Coreano (hangul),

    Cherokee,

    etíope,

    japonés(que incluye excepto caracteres chinos también alfabeto silábico),

y otros.

Se han agregado muchos escritos históricos con fines académicos, que incluyen: runas germánicas, runas turcas antiguas, griego antiguo, Jeroglíficos egipcios, cuneiforme, escritura maya, alfabeto etrusco.

Unicode proporciona una amplia gama de matemático Y musical personajes, así como pictogramas.

Sin embargo, Unicode generalmente no incluye logotipos de empresas y productos, aunque se encuentran en fuentes (por ejemplo, el logotipo Manzana en codificacion macroman(0xF0) o logotipo ventanas en fuente Wingdings (0xFF)). En las fuentes Unicode, los logotipos sólo deben colocarse en el área de caracteres personalizados.

ISO/CEI 10646

El Consorcio Unicode trabaja en estrecha colaboración con el grupo de trabajo ISO/IEC/JTC1/SC2/WG2 que está desarrollando la Norma Internacional 10646 ( ISO/CEI 10646). Existe sincronización entre el estándar Unicode e ISO/IEC 10646, aunque cada estándar utiliza su propia terminología y sistema de documentación.

Colaboración entre el Consorcio Unicode y la Organización Internacional de Normalización ( Inglés Organización Internacional de Normalización, ISO) comenzó en 1991 año. EN 1993 año ISO ha publicado el estándar DIS 10646.1. Para sincronizarlo, el Consorcio aprobó el estándar Unicode versión 1.1, que incluía caracteres adicionales de DIS 10646.1. Como resultado, los significados de los caracteres codificados en Unicode 1.1 y DIS 10646.1 coincidieron completamente.

Posteriormente continuó la cooperación entre las dos organizaciones. EN 2000 El estándar Unicode 3.0 se ha sincronizado con ISO/IEC 10646-1:2000. La próxima tercera versión de ISO/IEC 10646 se sincronizará con Unicode 4.0. Quizás estas especificaciones incluso se publiquen como un estándar único.

Similar a los formatos UTF-16 y UTF-32 en el estándar Unicode, el estándar ISO/IEC 10646 también tiene dos formas básicas de codificación de caracteres: UCS-2 (2 bytes por carácter, similar a UTF-16) y UCS-4. (4 bytes por carácter, similar a UTF-32). UCS significa multiocteto universal(multibyte) conjunto de caracteres codificados (Inglés universal múltiple- octeto codificado personaje colocar). UCS-2 puede considerarse un subconjunto de UTF-16 (UTF-16 sin pares sustitutos) y UCS-4 es sinónimo de UTF-32.

Métodos de presentación

Unicode tiene varias formas de representación ( Inglés Formato de transformación Unicode, UTF): UTF-8, UTF-16(UTF-16BE, UTF-16LE) y UTF-32 (UTF-32BE, UTF-32LE). La forma de representación UTF-7 también se desarrolló para la transmisión a través de canales de siete bits, pero debido a la incompatibilidad con ASCII no está muy extendido y no está incluido en la norma. 1 de abril 2005 Se propusieron dos formas cómicas de representación: UTF-9 y UTF-18 ( RFC 4042).

EN microsoft WindowsNT y sistemas basados ​​en él ventana 2000 Y WindowsXP principalmente usado Formulario UTF-16LE. EN UNIX-similar sistemas operativos GNU/Linux, BSD Y MacOS X el formato aceptado es UTF-8 para archivos y UTF-32 o UTF-8 para procesar caracteres en RAM.

código puny- otra forma de codificar secuencias de caracteres Unicode en las llamadas secuencias ACE, que constan únicamente de caracteres alfanuméricos, como se permite en los nombres de dominio.

Artículo principal: UTF-8

UTF-8 es una representación de Unicode que proporciona la mejor compatibilidad con sistemas más antiguos que usaban caracteres de 8 bits. El texto que consta únicamente de caracteres numerados menos de 128 se convierte a texto sin formato cuando se escribe en UTF-8 ASCII. Por el contrario, en texto UTF-8 cualquier byte con un valor inferior a 128 representa un carácter ASCII con el mismo código. Los caracteres Unicode restantes se representan como secuencias que varían de 2 a 6 bytes de longitud (de hecho, solo hasta 4 bytes, ya que Unicode no tiene caracteres con un código mayor a 10FFFF y no hay planes para introducirlos en el futuro). ), en el que el primer byte es siempre 11xxxxxx y el resto, 10xxxxxx.

Se inventó el formato UTF-8 2 de septiembre 1992 Ken Thompson Y Rob Pike e implementado en plano 9 . Ahora el estándar UTF-8 está oficialmente consagrado en documentos RFC 3629 e ISO/IEC 10646 Anexo D.

Los caracteres UTF-8 se derivan de Unicode como sigue:

0x00000000 - 0x0000007F: 0xxxxxxx

0x00000080 - 0x000007FF: 110xxxxx 10xxxxxx

0x00000800 - 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx

0x00010000 - 0x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Teóricamente posible, pero tampoco incluido en la norma:

0x00200000 - 0x03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

0x04000000 - 0x7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

Aunque UTF-8 permite especificar el mismo carácter de varias formas, sólo la más corta es correcta. Otros formularios deben rechazarse por razones de seguridad.

Orden de bytes

En un flujo de datos UTF-16, el byte alto se puede escribir antes del byte bajo ( Inglés UTF-16 little-endian), o después del menor ( Inglés. UTF-16 big-endian). De manera similar, existen dos opciones para la codificación de cuatro bytes: UTF-32LE y UTF-32BE.

Para determinar el formato de representación Unicode, se escribe lo siguiente al principio del archivo de texto: firma- el carácter U+FEFF (espacio sin separación de ancho cero), también llamado marca de orden de bytes (Inglés byte orden marca, lista de materiales ). Esto permite diferenciar UTF-16LE y UTF-16BE ya que el carácter U+FFFE no existe. Este método también se utiliza en ocasiones para referirse al formato UTF-8, aunque el concepto de orden de bytes no es aplicable a este formato. Los archivos que siguen esta convención comienzan con las siguientes secuencias de bytes:

Desafortunadamente, este método no distingue de manera confiable entre UTF-16LE y UTF-32LE, ya que Unicode permite el carácter U+0000 (aunque el texto real rara vez comienza con él).

Los archivos codificados en UTF-16 y UTF-32 que no contienen una lista de materiales deben estar en orden de bytes big-endian ( unicode.org).

Unicode y codificaciones tradicionales.

La introducción de Unicode provocó un cambio en el enfoque de las codificaciones tradicionales de 8 bits. Si antes la codificación se especificaba mediante la fuente, ahora se especifica mediante una tabla de correspondencia entre la codificación dada y Unicode. De hecho, las codificaciones de 8 bits se han convertido en una forma de representación de un subconjunto de Unicode. Esto ha hecho que sea mucho más fácil crear programas que necesitan trabajar con muchas codificaciones diferentes: ahora, para agregar soporte para otra codificación, solo necesita agregar otra tabla de conversión Unicode.

Además, muchos formatos de datos le permiten insertar cualquier carácter Unicode, incluso si el documento está escrito en la antigua codificación de 8 bits. Por ejemplo, en HTML puedes usar códigos con ampersand.

Implementaciones

La mayoría de los sistemas operativos modernos ofrecen cierto grado de compatibilidad con Unicode.

En sistemas operativos de la familia. WindowsNT Para la representación interna de nombres de archivos y otras cadenas del sistema, se utiliza la codificación UTF-16LE de doble byte. Las llamadas al sistema que aceptan parámetros de cadena vienen en variedades de un solo byte y de doble byte. Para más detalles, consulte el artículo. .

UNIX-sistemas operativos similares, incluidos GNU/Linux, BSD, MacOS X, utilice la codificación UTF-8 para representar Unicode. La mayoría de los programas pueden tratar UTF-8 como si fueran codificaciones tradicionales de un solo byte, independientemente de que un carácter se represente como varios bytes consecutivos. Para tratar con caracteres individuales, las cadenas generalmente se vuelven a codificar en UCS-4, de modo que cada carácter corresponda a palabra máquina.

Una de las primeras implementaciones comerciales exitosas de Unicode fue el entorno de programación. Java. Abandonó fundamentalmente la representación de caracteres de 8 bits en favor de la de 16 bits. Esta solución aumentó el consumo de memoria, pero nos permitió devolver una abstracción importante a la programación: un carácter único arbitrario (tipo char). En particular, el programador podría trabajar con una cadena como si fuera una simple matriz. Desafortunadamente, el éxito no fue definitivo, Unicode superó el límite de 16 bits y en la versión J2SE 5.0 un carácter arbitrario nuevamente comenzó a ocupar un número variable de unidades de memoria: uno o dos caracteres (ver. pareja sustituta).

La mayoría de los lenguajes de programación ahora admiten cadenas Unicode, aunque su representación puede variar según la implementación.

Métodos de entrada

ya que ninguno distribución del teclado no se puede permitir que se introduzcan todos los caracteres Unicode a la vez, desde sistemas operativos Y programas de aplicacion Se requiere compatibilidad con métodos alternativos para ingresar caracteres Unicode arbitrarios.

Windows

Artículo principal: Unicode en los sistemas operativos de Microsoft

A partir de ventana 2000, la utilidad Charmap (charmap.exe) muestra todos los caracteres en el sistema operativo y le permite copiarlos a portapapeles. Una tabla similar está disponible, por ejemplo, en Microsoft Word.

A veces puedes marcar hexadecimal código, presione Alt.+X, y el código será reemplazado por el carácter correspondiente, por ejemplo, en WordPad,Microsoft Word. En los editores, Alt+X también realiza la conversión inversa.

En muchos programas de MS Windows, para obtener un carácter Unicode, debe presionar la tecla Alt y escribir el valor decimal del código de carácter en el teclado numérico. Por ejemplo, las combinaciones Alt+0171 (“) y Alt+0187 (“”) serán útiles al escribir textos cirílicos. También son interesantes las combinaciones Alt+0133 (…) y Alt+0151 (-).

Macintosh

EN Mac OS Las versiones 8.5 y posteriores admiten un método de entrada llamado "Entrada hexadecimal Unicode". Mientras mantiene presionada la tecla Opción, debe escribir el código hexadecimal de cuatro dígitos del carácter requerido. Este método le permite ingresar caracteres con códigos mayores que U+FFFF usando pares sustitutos; dichos pares serán reemplazados automáticamente por caracteres individuales por el sistema operativo. Antes de su uso, este método de entrada debe activarse en la sección correspondiente de la configuración del sistema y luego seleccionarse como el método de entrada actual en el menú del teclado.

A partir de MacOS X 10.2, también hay una aplicación "Paleta de caracteres" que le permite seleccionar caracteres de una tabla en la que puede seleccionar caracteres de un bloque específico o caracteres admitidos por una fuente específica.

GNU/Linux

EN GNOMO También hay una utilidad de "Tabla de símbolos" que le permite mostrar los símbolos de un determinado bloque o sistema de escritura y brinda la posibilidad de buscar por nombre o descripción del símbolo. Cuando se conoce el código del carácter deseado, se puede ingresar de acuerdo con el estándar ISO 14755: mientras mantiene presionadas las teclas Ctrl + ⇧ Cambio ingrese el código hexadecimal (a partir de algunas versiones de GTK+, la introducción del código debe ir precedida de presionar la tecla "U"). El código hexadecimal que ingrese puede tener hasta 32 bits, lo que le permitirá ingresar cualquier carácter Unicode sin utilizar pares sustitutos.




Arriba