¿Cuántos bits o bytes hay por "carácter"?
¿Cuántos bits o bytes hay por "carácter"?
Respuestas:
Depende de cuál sea el carácter y en qué codificación esté:
Un carácter ASCII en codificación ASCII de 8 bits es de 8 bits (1 byte), aunque puede caber en 7 bits.
Un carácter ISO-8895-1 en la codificación ISO-8859-1 es de 8 bits (1 byte).
Un carácter Unicode en codificación UTF-8 está entre 8 bits (1 byte) y 32 bits (4 bytes).
Un carácter Unicode en codificación UTF-16 tiene entre 16 (2 bytes) y 32 bits (4 bytes), aunque la mayoría de los caracteres comunes toman 16 bits. Esta es la codificación que usa Windows internamente.
Un carácter Unicode en codificación UTF-32 es siempre de 32 bits (4 bytes).
Un carácter ASCII en UTF-8 es de 8 bits (1 byte) y en UTF-16, 16 bits.
Los caracteres adicionales (no ASCII) en ISO-8895-1 (0xA0-0xFF) tomarían 16 bits en UTF-8 y UTF-16.
Eso significaría que hay entre 0.03125 y 0.125 caracteres en un bit.
Hay 8 bits en un byte (normalmente hablando en Windows).
Sin embargo, si se trata de personajes, dependerá del juego de caracteres / codificación. El carácter Unicode puede tener 2 o 4 bytes, por lo que serían 16 o 32 bits, mientras que Windows-1252 a veces llamado incorrectamente ANSI tiene solo 1 bytes, es decir, 8 bits.
En la versión asiática de Windows y algunas otras, todo el sistema se ejecuta en doble byte, por lo que un carácter es de 16 bits.
EDITADO
Según el comentario de Matteo, todas las versiones contemporáneas de Windows usan 16 bits internamente por carácter.
wchar_t
), no solo asiáticos, y también deberían hacerlo todas las aplicaciones más nuevas. (En Linux, en cambio, es una historia completamente diferente ya que generalmente se usa UTF-8 en todo el sistema)
char
, mientras que las cadenas Unicode se almacenan usando el wchar_t
tipo. Por cierto, cuando se inició NT, fue wchar_t
suficiente para evitar pares sustitutos, pero ahora que es UTF-16, incluso las wchar_t
cadenas pueden tener caracteres de longitud variable, por lo que en Windows un carácter Unicode puede tomar de 2 a 4 bytes (1 o 2 wchar_t
).
:)