Articulo de referencia

Carácter amplio

Un carácter ancho es un tipo de dato de carácter informático que generalmente tiene un tamaño mayor que el carácter tradicional de 8 bits . El mayor tamaño del tipo de dato perm...

Un carácter ancho es un tipo de dato de carácter informático que generalmente tiene un tamaño mayor que el carácter tradicional de 8 bits . El mayor tamaño del tipo de dato 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 dato 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 en máquinas de teletipo y terminales de computadora . El bit adicional se utilizaba 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 dato por defecto para los sistemas informáticos que almacenaban caracteres ASCII en memoria.

Posteriormente, los fabricantes de computadoras comenzaron a utilizar el bit de reserva para extender el conjunto de caracteres ASCII más allá de su limitado conjunto 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 generalizaron, ofreciendo soporte en terminales para caracteres griegos , cirílicos y muchos otros. Sin embargo, dichas extensiones seguían siendo limitadas, ya que eran específicas de cada región y, a menudo, no podían utilizarse simultáneamente. Era necesario utilizar 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 un carácter equivalente en el conjunto de destino.

En 1989, la Organización Internacional de Normalización (ISO) comenzó a trabajar en el Conjunto Universal de Caracteres (CUC), un conjunto de caracteres multilingüe que podía codificarse utilizando valores de 16 bits (2 bytes) o 32 bits (4 bytes). Estos valores mayores requerían el uso de un tipo de dato superior a 8 bits para almacenar los nuevos 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 dato en memoria. No indica cómo se define cada valor en un conjunto de caracteres. Dichos valores se definen mediante conjuntos de caracteres, siendo UCS y Unicode dos conjuntos comunes que codifican más caracteres de los que permitiría un valor numérico de 8 bits (255 en total).

Relación con caracteres multibyte

Así como los sistemas de transmisión de datos anteriores adolecían de la falta de una ruta de datos limpia de 8 bits , los sistemas de transmisión modernos a menudo carecen de soporte para 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 usar varios bytes para codificar un valor demasiado grande para un solo símbolo de 8 bits.

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

Tamaño de un carácter ancho

La adopción temprana de UCS-2 ("Unicode 1.0") propició el uso generalizado de UTF-16 en diversas plataformas, especialmente en Microsoft Windows , .NET y Java . En estos sistemas, es común encontrar un tipo de "carácter ancho" ( wchar_ten C/C++; charen Java) de 16 bits. Estos tipos no siempre se corresponden directamente con un único "carácter", ya que se requieren pares subrogados para almacenar el rango completo de Unicode (1996, Unicode 2.0). [ 1 ] [ 2 ] [ 3 ]

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

El tamaño de un tipo de carácter ancho no determina qué tipo de codificaciones de texto puede procesar un sistema, ya que existen conversiones disponibles. (Sin embargo, el código de conversión antiguo suele pasar por alto los caracteres sustitutos). Las circunstancias históricas de su adopción también determinan 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. Otros sistemas, como los de tipo 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 manejar 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 implementación como algo definido. El estándar Unicode 4.0 ISO/IEC 10646:2003 establece que:wchar_t

"El ancho de wchar_tes específico del compilador y puede ser tan pequeño como 8 bits. Por consiguiente, los programas que necesitan ser portables a través de cualquier compilador de C o C++ no deben usar wchar_tpara almacenar texto Unicode. El wchar_ttipo está destinado a 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 usa wchar_tcomo base para su tipo de carácter Py_UNICODE. Depende de si wchar_tes "compatible con la variante de compilación Unicode de Python elegida" en ese sistema. [ 7 ] Esta distinción ha sido obsoleta desde Python 3.3, que introdujo un almacenamiento UCS1/2/4 de tamaño flexible para cadenas y formalmente alias Py_UNICODEa wchar_t. [ 8 ] Desde Python 3.12, el uso de wchar_t, es decir, el Py_UNICODEtypedef , para cadenas de Python (wstr en la implementación) se ha eliminado y aún así como antes, una " representación UTF-8 se crea bajo demanda y se almacena en caché en el objeto Unicode". [ 9 ]

Óxido

En Rust , a chares de 32 bits y representa un valor escalar Unicode. [ 10 ]

Referencias

  1. "Globalización paso a paso: Unicode habilitado" . msdn.microsoft.com . Archivado del original el 1 de enero de 2009.
  2. "Clase String (Sistema)" . learn.microsoft.com .
  3. "Tipos de datos primitivos (Tutoriales de Java™ > Aprendiendo el lenguaje Java > Conceptos básicos del lenguaje)" . docs.oracle.com .
  4. "Cadenas anchas terminadas en nulo <wctype.h> - cppreference.com" . en.cppreference.com .
  5. "UTF-8 en todas partes" . En los años siguientes, muchos sistemas añadieron compatibilidad con Unicode y adoptaron la codificación UCS-2. Esto resultó especialmente atractivo para nuevas tecnologías, como el framework Qt (1992), Windows NT 3.1 (1993) y Java (1995).
  6. "5.2 ANSI/ISO C wchar_t". El estándar Unicode . Aliprand, Joan., Consorcio Unicode. ( Edición versión 4.0). Boston: Addison-Wesley. 2003. pág. 109. ISBN   0-321-18578-1OCLC 52257637 {{cite book}}: CS1 mantenimiento: 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 .
  10. "Tipo primitivo char" . doc.rust-lang.org . Consultado el 7 de septiembre de 2025 .
  • El estándar Unicode, versión 4.0 - edición en línea
  • Funciones de caracteres anchos en C @ Java2S
  • Funciones Unicode de Java en Java2S
  • Página de manual multibyte (3) en FreeBSD.org
  • Caracteres multibyte y anchos en la Red de desarrolladores de Microsoft
  • Conjuntos de caracteres de Windows en la Red de desarrolladores de Microsoft
  • Referencia de programación de Unicode y conjuntos de caracteres en la Red de desarrolladores de Microsoft
  • Mantener la compatibilidad con caracteres multibyte sencilla @ EuroBSDCon, Belgrado, 25 de septiembre de 2016
Obtenido de " https://en.wikipedia.org/w/index.php?title=Wide_character&oldid=1310111985 "