Сколько бит или байтов содержится в символе? [закрыто]

96

Сколько битов или байтов приходится на «символ»?

RedKing
источник
1
Ваш вопрос и название задают разные вопросы. В любом случае, я вас не понимаю, вы можете объяснить дальше?
галымжан
Да, я тоже не был уверен в этом. Но байт больше соответствует его названию. Количество символов в одном бите не имеет смысла, но количество битов в символе имеет больше смысла. Однако для этого требуется контекст, как упоминалось выше.
Skurmedel
4
@Skurmedel: Как ты себя представляешь? В названии также говорится «биты».
Коди Грей
@ Коди Грей: Посмотрите мой отредактированный ответ. Его теги говорят о байтах, поэтому я решил, что это опечатка. Хотя я могу ошибаться.
Skurmedel
@Skurmedel: Я не понимаю ... Вы не отправили ответ на вопрос. И да, раньше я метку не замечал. Но я по-прежнему склонен думать, что 2/3 лучше, чем 1/3.
Коди Грей

Ответы:

200

Это зависит от того, что это за символ и в какой он кодировке:

  • Символ 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 символов.

Рош Оксюморон
источник
Этот ответ очень помогает при работе с сокетами, кодировкой, текстом и т. Д.
Марио Мейреллес
17

В байте 8 бит (обычно в Windows).

Однако, если вы имеете дело с символами, это будет зависеть от кодировки / кодировки. Символ Unicode может быть 2 или 4 байта, то есть 16 или 32 бит, тогда как Windows-1252, иногда неправильно называемый ANSI, составляет всего 1 байт, то есть 8 бит.

В азиатской версии Windows и некоторых других вся система работает в двухбайтовом формате, поэтому длина символа составляет 16 бит.

ИЗМЕНЕНО

Согласно комментарию Маттео, все современные версии Windows используют 16 бит для внутреннего символа.

RichardTheKiwi
источник
некоторые устаревшие приложения по-прежнему используют 1-байтовые символы с локальными кодовыми страницами, но все версии Windows для NT внутренне работают с 2-байтовыми символами (от UCS-2 до NT4, UTF-16 начиная с Windows 2000, хранятся как wchar_t), не только азиатские и так должны поступать все новые приложения. (В Linux, наоборот, это совершенно другая история, поскольку обычно UTF-8 используется во всей системе)
Matteo Italia
@Matteo: обратите внимание, что в Windows двухбайтность не обязательно совпадает с Unicode. Ссылка
Коди Грей
@Cody Gray: да, обычно, когда вы читаете "двухбайтовую" кодировку, это устаревшие азиатские вещи, и они хранятся как несколько char, а строки Unicode хранятся с использованием wchar_tтипа. Кстати, когда был запущен NT, wchar_tбыло достаточно, чтобы избежать суррогатных пар, но теперь, когда это UTF-16, даже wchar_tстроки могут иметь символы переменной длины, поэтому в Windows символ Unicode может занимать от 2 до 4 байтов (1 или 2 wchar_t).
Маттео Италия
@ Маттео: Да, я согласен с тобой. Думаю, я видел кое-что, что предполагало иное, прежде чем вы редактировали свой первый комментарий, и тогда я написал свой. Строки Unicode UTF-16 теперь используются внутри всех версий Windows.
Коди Грей
@Cody Gray: Я склонен слишком часто редактировать свои комментарии, это приводит к путанице:)
Matteo Italia