stringtranslate.com

Personaje amplio

Un carácter ancho es un tipo de datos de caracteres informáticos que, por lo general, tiene un tamaño mayor que el carácter tradicional de 8 bits . El mayor tamaño del tipo de datos permite el uso de conjuntos de caracteres codificados más grandes .

Historia

Durante la década de 1960, los fabricantes de mainframes y minicomputadoras comenzaron a estandarizar el byte de 8 bits como su tipo de datos más pequeño. El conjunto de caracteres ASCII de 7 bits se convirtió en el método estándar de la industria para codificar caracteres alfanuméricos para máquinas de teletipo y terminales de computadora . El bit adicional se utilizó para la paridad, para garantizar la integridad del almacenamiento y la transmisión de datos. Como resultado, el byte de 8 bits se convirtió en el tipo de datos de facto para los sistemas informáticos que almacenaban caracteres ASCII en la memoria.

Más tarde, los fabricantes de computadoras comenzaron a utilizar el bit de repuesto para ampliar el conjunto de caracteres ASCII más allá de su conjunto limitado de caracteres del alfabeto inglés . Las extensiones de 8 bits como la página de códigos 37 de IBM, PETSCII e ISO 8859 se volvieron comunes, ofreciendo soporte de terminal para griego , cirílico y muchos otros. Sin embargo, dichas extensiones aún estaban limitadas porque eran específicas de la región y, a menudo, no se podían usar en tándem. Se debían usar rutinas de conversión especiales para convertir de un conjunto de caracteres a otro, lo que a menudo resultaba en una traducción destructiva cuando no existía ningún carácter equivalente en el conjunto de destino.

En 1989, la Organización Internacional de Normalización comenzó a trabajar en el conjunto de caracteres universal (UCS), un conjunto de caracteres multilingüe que podía codificarse utilizando un valor de 16 bits (2 bytes) o de 32 bits (4 bytes). Estos valores más grandes requerían el uso de un tipo de datos mayor que 8 bits para almacenar los nuevos valores de caracteres en la memoria. Por ello, se utilizó el término carácter ancho para diferenciarlos de los tipos de datos de caracteres tradicionales de 8 bits.

Relación con UCS y Unicode

Un carácter ancho se refiere al tamaño del tipo de datos en la memoria. No indica cómo se define cada valor en un conjunto de caracteres. En cambio, esos valores se definen mediante conjuntos de caracteres, siendo UCS y Unicode simplemente dos conjuntos de caracteres comunes que codifican más caracteres de los que permitiría un valor numérico de 8 bits de ancho (255 en total).

Relación con caracteres multibyte

De la misma forma que los sistemas de transmisión de datos anteriores carecían de una ruta de datos limpia de 8 bits , los sistemas de transmisión modernos a menudo carecen de compatibilidad con rutas de datos de 16 o 32 bits para datos de caracteres. Esto ha dado lugar a sistemas de codificación de caracteres como UTF-8 , que pueden utilizar varios bytes para codificar un valor que es demasiado grande para un único símbolo de 8 bits.

El estándar C distingue entre codificaciones multibyte de caracteres, que utilizan un número fijo o variable de bytes para representar cada carácter (utilizados principalmente en el código fuente y archivos externos), y caracteres anchos , que son representaciones en tiempo de ejecución de caracteres en objetos individuales (normalmente, más de 8 bits).

Tamaño de un carácter ancho

La adopción temprana de UCS-2 ("Unicode 1.0") condujo al uso común de UTF-16 en varias plataformas, más notablemente Microsoft Windows , .NET y Java . En estos sistemas, es común tener un tipo de "carácter ancho" ( wchar_ten C/C++; charen Java) de 16 bits. Estos tipos no siempre se asignan directamente a un "carácter", ya que se requieren pares sustitutos para almacenar el rango completo de Unicode (1996, Unicode 2.0). [1] [2] [3]

Los sistemas tipo Unix generalmente utilizan 32 bits wchar_tpara adaptarse al punto de código Unicode de 21 bits, como prescribe C90. [4]

El tamaño de un tipo de carácter ancho no dicta qué tipo de codificaciones de texto puede procesar un sistema, ya que existen conversiones. (Sin embargo, los códigos de conversión antiguos suelen pasar por alto los sustitutos). Las circunstancias históricas de su adopción también deciden qué tipos de codificación prefieren . Un sistema influenciado por Unicode 1.0, como Windows, tiende a utilizar principalmente "cadenas anchas" formadas por unidades de caracteres anchos. Sin embargo, otros sistemas, como los similares a Unix, tienden a conservar la convención de "cadena estrecha" de 8 bits, utilizando una codificación multibyte (casi universalmente UTF-8) para manejar caracteres "anchos". [5]

Detalles de programación

C/C++

Las bibliotecas estándar de C y C++ incluyen una serie de funciones para trabajar con caracteres anchos y cadenas compuestas por ellos. Los caracteres anchos se definen utilizando el tipo de datos wchar_t, que en el estándar C90 original se definía como

"un tipo integral cuyo rango de valores puede representar códigos distintos para todos los miembros del conjunto de caracteres extendido más grande especificado entre las configuraciones regionales admitidas" (ISO 9899:1990 §4.1.5)

Tanto C como C++ introdujeron tipos de caracteres de tamaño fijo char16_ty, en las revisiones de 2011 de sus respectivos estándares, proporcionaron una representación inequívoca de los formatos de transformación Unicodechar32_t de 16 y 32 bits , dejando la definición de la implementación. El estándar Unicode 4.0 ISO/IEC 10646:2003 dice que:wchar_t

"El ancho de wchar_tes específico del compilador y puede ser tan pequeño como 8 bits. En consecuencia, los programas que necesitan ser portables a través de cualquier compilador C o C++ no deberían usarlo wchar_tpara almacenar texto Unicode. El wchar_ttipo está pensado para almacenar caracteres anchos definidos por el compilador, que pueden ser caracteres Unicode en algunos compiladores". [6]

Pitón

Según la documentación de Python 2.7, el lenguaje a veces utiliza wchar_tcomo base para su tipo de carácter Py_UNICODE. Depende de si wchar_tes "compatible con la variante de compilación de Unicode de Python elegida" en ese sistema. [7] Esta distinción ha quedado obsoleta desde Python 3.3, que introdujo un almacenamiento UCS1/2/4 de tamaño flexible para cadenas y se Py_UNICODEle asignó formalmente el alias wchar_t. [8] Desde Python 3.12, el uso de wchar_t, es decir, el Py_UNICODE typedef , para cadenas de Python (wstr en la implementación) se ha abandonado y sigue siendo como antes una " representación UTF-8 se crea a pedido y se almacena en caché en el objeto Unicode". [9]

Referencias

  1. ^ "La globalización paso a paso: Unicode habilitado". msdn.microsoft.com . Archivado desde el original el 1 de enero de 2009.
  2. ^ "Clase de cadena (sistema)". learn.microsoft.com .
  3. ^ "Tipos de datos primitivos (Tutoriales de Java™ > Aprendizaje del lenguaje Java > Conceptos básicos del lenguaje)". docs.oracle.com .
  4. ^ "Cadenas anchas terminadas en nulo <wctype.h> - cppreference.com". es.cppreference.com .
  5. ^ "UTF-8 Everywhere". En los años siguientes, muchos sistemas añadieron compatibilidad con Unicode y cambiaron a la codificación UCS-2. Esta codificación resultó especialmente atractiva para las nuevas tecnologías, como el marco Qt (1992), Windows NT 3.1 (1993) y Java (1995).
  6. ^ "5.2 ANSI/ISO C wchar_t". El estándar Unicode. Aliprand, Joan., Unicode Consortium. (Versión 4.0 ed.). Boston: Addison-Wesley. 2003. p. 109. ISBN 0-321-18578-1.OCLC 52257637  .{{cite book}}: Mantenimiento de CS1: otros ( enlace )
  7. ^ "Objetos y códecs Unicode: documentación de Python 2.7". docs.python.org . Consultado el 19 de diciembre de 2009 .
  8. ^ "Objetos y códecs Unicode: documentación de Python 3.10.10". docs.python.org . Consultado el 18 de febrero de 2023 .
  9. ^ "Objetos y códecs Unicode". Documentación de Python . Consultado el 9 de septiembre de 2023 .

Enlaces externos