Скільки бітів чи байтів у символі? [зачинено]


96

Скільки бітів або байтів припадає на "символ"?


1
Ваше запитання та назва вимагають різних речей. У будь-якому разі, я вас не розумію, можете пояснити далі?
галимжан

Так, я теж не був у цьому впевнений. Але байт більше відповідає його заголовку. Кількість символів в одному біті мало сенсу, але скільки бітів у символі має більше сенсу. Це вимагає контексту, як уже згадувалося вище.
Скурмедель

4
@Skurmedel: Як ти фігуруєш? У назві також говорилося "біти".
Коді Грей

@ Коді Грей: Подивіться на мою відредаговану відповідь. У його тегах написано байт, тому я зрозумів, що це друкарська помилка. Я, можливо, помиляюся.
Скурмедель

@Skurmedel: Я не розумію ... Ви не опублікували відповіді на запитання. І так, я раніше не помічав тегу. Але я все ще схильний думати, що 2/3 - кращий збіг, ніж 1/3.
Коді Грей

Відповіді:


199

Це залежить від того, який символ і в якому кодуванні він знаходиться:

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


Ця відповідь дуже допомагає при роботі з сокетами, кодуванням, текстом тощо.
Mário Meyrelles

17

У байті 8 бітів (як правило, у Windows).

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

В азіатській версії Windows та деяких інших система вся система працює у двобайтовому режимі, тому символ складає 16 біт.

ВИДАЛЕНО

Відповідно до коментаря Маттео, усі сучасні версії Windows використовують 16-бітові дані для кожного символу.


деякі застарілі програми все ще використовують 1-байтові символи з локальними кодовими сторінками, але всі NT-версії Windows внутрішньо працюють із двобайтовими символами (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).
Matteo Italia

@Matteo: Так, я з вами згоден. Здається, я бачив щось, що пропонувало інакше, до того, як ви відредагували свій перший коментар, і саме тоді я написав свій. Рядки Unicode UTF-16 зараз використовуються внутрішньо для всіх версій Windows.
Коді Грей

@Cody Gray: Я схильний редагувати свої коментарі занадто багато, це призводить до плутанини:)
Matteo Italia,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.