Wie viele Bits oder Bytes enthält ein Zeichen? [geschlossen]

94

Wie viele Bits oder Bytes gibt es pro "Zeichen"?

Roter König
quelle
1
Ihre Frage und Ihr Titel fragen nach verschiedenen Dingen. Wie auch immer, ich verstehe dich nicht, kannst du es weiter erklären?
Galymzhan
Ja, da war ich mir auch nicht sicher. Aber Byte stimmt mehr mit seinem Titel überein. Die Anzahl der Zeichen in einem Bit macht wenig Sinn, aber wie viele Bits in einem Zeichen sind sinnvoller. Es erfordert jedoch Kontext, wie oben erwähnt.
Skurmedel
4
@ Kurmedel: Wie findest du das? Der Titel sagte auch "Bits".
Cody Gray
@Cody Grey: Schau dir meine bearbeitete Antwort an. Auf seinen Tags steht Byte, also dachte ich, es sei ein Tippfehler. Ich könnte mich jedoch irren.
Skurmedel
@ Kurmedel: Ich verstehe nicht ... Sie haben keine Antwort auf die Frage gepostet. Und ja, ich habe das Tag vorher nicht bemerkt. Aber ich bin immer noch geneigt zu denken, dass 2/3 besser passt als 1/3.
Cody Gray

Antworten:

194

Es hängt davon ab, was das Zeichen ist und in welcher Kodierung es sich befindet:

  • Ein ASCII-Zeichen in 8-Bit-ASCII-Codierung ist 8 Bit (1 Byte), kann jedoch in 7 Bit passen.

  • Ein ISO-8895-1-Zeichen in der ISO-8859-1-Codierung besteht aus 8 Bit (1 Byte).

  • Ein Unicode-Zeichen in der UTF-8-Codierung liegt zwischen 8 Bit (1 Byte) und 32 Bit (4 Byte).

  • Ein Unicode-Zeichen in der UTF-16-Codierung liegt zwischen 16 (2 Byte) und 32 Bit (4 Byte), obwohl die meisten gängigen Zeichen 16 Bit benötigen. Dies ist die von Windows intern verwendete Codierung.

  • Ein Unicode-Zeichen in der UTF-32-Codierung ist immer 32 Bit (4 Byte).

  • Ein ASCII-Zeichen in UTF-8 ist 8 Bit (1 Byte) und in UTF-16-16 Bit.

  • Die zusätzlichen (Nicht-ASCII-) Zeichen in ISO-8895-1 (0xA0-0xFF) würden in UTF-8 und UTF-16 16 Bit benötigen.

Das würde bedeuten, dass ein Bit zwischen 0,03125 und 0,125 Zeichen enthält.

Rosh Oxymoron
quelle
Diese Antwort hilft sehr beim Umgang mit Sockets, Codierung, Text und so weiter.
Mário Meyrelles
17

Ein Byte enthält 8 Bits (normalerweise unter Windows).

Wenn Sie jedoch mit Zeichen arbeiten, hängt dies vom Zeichensatz / der Codierung ab. Unicode-Zeichen können 2 oder 4 Bytes sein, das sind also 16 oder 32 Bit, während Windows-1252, das manchmal fälschlicherweise als ANSI bezeichnet wird, nur 1 Byte, also 8 Bit, ist.

In der asiatischen Version von Windows und einigen anderen wird das gesamte System in Doppelbyte ausgeführt, sodass ein Zeichen 16 Bit groß ist.

BEARBEITET

Laut Matteos Kommentar verwenden alle modernen Windows-Versionen intern 16 Bit pro Zeichen.

RichardTheKiwi
quelle
Einige ältere Apps verwenden immer noch 1-Byte-Zeichen mit lokalen Codepages, aber alle NT-Versionen von Windows werden intern mit 2-Byte-Zeichen ausgeführt (UCS-2 bis NT4, UTF-16 ab Windows 2000, gespeichert als wchar_t), nicht nur asiatische. und so sollten alle neueren Anwendungen tun. (Unter Linux ist es stattdessen eine ganz andere Geschichte, da normalerweise UTF-8 im gesamten System verwendet wird.)
Matteo Italia
@Matteo: Beachten Sie, dass Doppelbyte in Windows nicht unbedingt mit Unicode identisch ist. Referenz
Cody Gray
@Cody Gray: Ja, normalerweise, wenn Sie "Doppelbyte" -Codierung lesen, handelt es sich um altes asiatisches Material, und sie werden als mehrere gespeichert char, während Unicode-Zeichenfolgen unter Verwendung des wchar_tTyps gespeichert werden . Übrigens, als NT gestartet wchar_twurde, reichte a aus, um Ersatzpaare zu vermeiden, aber jetzt, da es sich um UTF-16 handelt, können sogar wchar_tZeichenfolgen Zeichen variabler Länge haben, sodass unter Windows ein Unicode-Zeichen 2 bis 4 Bytes (1 oder 2) dauern kann wchar_t).
Matteo Italia
@ Matto: Ja, ich stimme dir zu. Ich glaube, ich habe etwas gesehen, das anders vorgeschlagen wurde, bevor Sie Ihren ersten Kommentar bearbeitet haben, und dann habe ich meinen geschrieben. UTF-16-Unicode-Zeichenfolgen werden jetzt intern für alle Windows-Versionen verwendet.
Cody Gray
@Cody Gray: Ich neige dazu, meine Kommentare ein bisschen zu viel zu bearbeiten, es führt zu Verwirrung:)
Matteo Italia