Сколько битов или байтов приходится на «символ»?
Сколько битов или байтов приходится на «символ»?
Ответы:
Это зависит от того, что это за символ и в какой он кодировке:
Символ ASCII в 8-битной кодировке ASCII составляет 8 бит (1 байт), хотя он может уместиться в 7 битах.
Символ ISO-8895-1 в кодировке ISO-8859-1 составляет 8 бит (1 байт).
Символ Unicode в кодировке UTF-8 составляет от 8 бит (1 байт) до 32 бит (4 байта).
Символ Unicode в кодировке UTF-16 имеет размер от 16 (2 байта) до 32 бит (4 байта), хотя большинство общих символов занимают 16 бит. Это кодировка, используемая Windows внутри.
Символ Unicode в кодировке UTF-32 всегда 32 бита (4 байта).
Символ ASCII в UTF-8 составляет 8 бит (1 байт), а в UTF-16 - 16 бит.
Дополнительные (не-ASCII) символы в ISO-8895-1 (0xA0-0xFF) будут занимать 16 бит в UTF-8 и UTF-16.
Это будет означать, что в битах содержится от 0,03125 до 0,125 символов.
В байте 8 бит (обычно в Windows).
Однако, если вы имеете дело с символами, это будет зависеть от кодировки / кодировки. Символ Unicode может быть 2 или 4 байта, то есть 16 или 32 бит, тогда как Windows-1252, иногда неправильно называемый ANSI, составляет всего 1 байт, то есть 8 бит.
В азиатской версии Windows и некоторых других вся система работает в двухбайтовом формате, поэтому длина символа составляет 16 бит.
ИЗМЕНЕНО
Согласно комментарию Маттео, все современные версии Windows используют 16 бит для внутреннего символа.
wchar_t
), не только азиатские и так должны поступать все новые приложения. (В Linux, наоборот, это совершенно другая история, поскольку обычно UTF-8 используется во всей системе)
char
, а строки Unicode хранятся с использованием wchar_t
типа. Кстати, когда был запущен NT, wchar_t
было достаточно, чтобы избежать суррогатных пар, но теперь, когда это UTF-16, даже wchar_t
строки могут иметь символы переменной длины, поэтому в Windows символ Unicode может занимать от 2 до 4 байтов (1 или 2 wchar_t
).
:)