Ile bitów lub bajtów przypada na „znak”?
Ile bitów lub bajtów przypada na „znak”?
Odpowiedzi:
To zależy, jaki jest znak i jakie jest kodowanie:
Znak ASCII w 8-bitowym kodowaniu ASCII ma 8 bitów (1 bajt), chociaż może zmieścić się w 7 bitach.
Znak ISO-8895-1 w kodowaniu ISO-8859-1 ma 8 bitów (1 bajt).
Znak Unicode w kodowaniu UTF-8 ma długość od 8 bitów (1 bajt) do 32 bitów (4 bajty).
Znak Unicode w kodowaniu UTF-16 ma rozmiar od 16 (2 bajty) do 32 bitów (4 bajty), chociaż większość typowych znaków ma 16 bitów. To jest kodowanie używane wewnętrznie przez system Windows.
Znak Unicode w kodowaniu UTF-32 ma zawsze 32 bity (4 bajty).
Znak ASCII w UTF-8 ma 8 bitów (1 bajt), aw UTF-16 - 16 bitów.
Dodatkowe (inne niż ASCII) znaki w ISO-8895-1 (0xA0-0xFF) zajęłyby 16 bitów w UTF-8 i UTF-16.
Oznaczałoby to, że w kawałku jest od 0,03125 do 0,125 znaków.
W bajcie jest 8 bitów (normalnie mówiąc w Windows).
Jeśli jednak masz do czynienia ze znakami, będzie to zależeć od zestawu znaków / kodowania. Znak Unicode może mieć 2 lub 4 bajty, czyli 16 lub 32 bity, podczas gdy Windows-1252 czasami nieprawidłowo nazywany ANSI ma tylko 1 bajt, czyli 8 bitów.
W azjatyckiej wersji systemu Windows i kilku innych cały system działa w formacie dwubajtowym, więc znak ma 16 bitów.
EDYTOWANO
Zgodnie z komentarzem Matteo, wszystkie współczesne wersje systemu Windows używają 16-bitów wewnętrznie na znak.
wchar_t
), nie tylko azjatyckie, i tak powinno być w przypadku wszystkich nowszych aplikacji. (Zamiast tego w Linuksie jest to zupełnie inna historia, ponieważ zwykle UTF-8 jest używany w całym systemie)
char
, podczas gdy łańcuchy Unicode są przechowywane przy użyciu wchar_t
typu. Nawiasem mówiąc, kiedy NT zostało uruchomione, wchar_t
wystarczyło, aby uniknąć par zastępczych, ale teraz, gdy jest to UTF-16, nawet wchar_t
łańcuchy mogą mieć znaki o zmiennej długości, więc w systemie Windows znak Unicode może zająć od 2 do 4 bajtów (1 lub 2 wchar_t
).
:)