¿Cuántos bits o bytes hay en un carácter? [cerrado]

96

¿Cuántos bits o bytes hay por "carácter"?

Rey rojo
fuente
1
Tu pregunta y tu título piden cosas diferentes. De todos modos, no te entiendo, ¿puedes explicarme más?
galymzhan
Sí, tampoco estaba seguro de eso. Pero byte es más consistente con su título. La cantidad de caracteres en un bit tiene poco sentido, pero la cantidad de bits en un carácter tiene más sentido. Sin embargo, requiere contexto, como se mencionó anteriormente.
Skurmedel
4
@Skurmedel: ¿Cómo te imaginas? El título también decía "bits".
Cody Gray
@Cody Gray: Mira mi respuesta editada. Sus etiquetas dicen byte, así que pensé que era un error tipográfico. Aunque podría estar equivocado.
Skurmedel
@Skurmedel: No entiendo ... No ha publicado una respuesta a la pregunta. Y sí, no me di cuenta de la etiqueta antes. Pero todavía me inclino a pensar que 2/3 es una mejor combinación que 1/3.
Cody Gray

Respuestas:

200

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.

Rosh Oxymoron
fuente
Esta respuesta ayuda mucho cuando se trata de sockets, codificación, texto, etc.
Mário Meyrelles
17

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.

RichardTheKiwi
fuente
Algunas aplicaciones heredadas todavía usan caracteres de 1 byte con páginas de códigos locales, pero todas las versiones NT de Windows se ejecutan internamente con caracteres de 2 bytes (UCS-2 hasta NT4, UTF-16 desde Windows 2000 en adelante, almacenado como 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)
Matteo Italia
@Matteo: tenga en cuenta que en Windows, el doble byte no es necesariamente lo mismo que Unicode. Referencia
Cody Gray
@Cody Gray: sí, generalmente cuando lee la codificación de "doble byte", son cosas asiáticas heredadas, y se almacenan como múltiples char, mientras que las cadenas Unicode se almacenan usando el wchar_ttipo. Por cierto, cuando se inició NT, fue wchar_tsuficiente para evitar pares sustitutos, pero ahora que es UTF-16, incluso las wchar_tcadenas 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).
Matteo Italia
@Matteo: Sí, estoy de acuerdo contigo. Creo que vi algo que sugirió algo diferente antes de que editaras tu primer comentario, y fue entonces cuando escribí el mío. Las cadenas Unicode UTF-16 se utilizan ahora internamente para todas las versiones de Windows.
Cody Gray
@Cody Gray: tiendo a editar demasiado mis comentarios, me lleva a la confusión:)
Matteo Italia