Кодировка windows сколько бит

Обновлено: 02.07.2024

Анализируя информацию, мы сталкиваемся с необходимостью определения качества и определения количества полученной информации. Определить качество информации чрезвычайно сложно, а часто и вообще невозможно. Какие-либо сведения, например исторические, могут десятилетиями считаться ненужными и вдруг их ценность может резко возрасти.

Вместе с тем определить количество информации не только можно, но и нужно. Это необходимо для того, чтобы сравнить друг с другом различные массивы информации, а также определить, какие размеры должны иметь материальные объекты (бумага, магнитные носители и т.д.), хранящие эту информацию.

Далее, говоря об измерении информации, мы будем иметь в виду определение ее количества.

Единая форма кодирования и измерения количества информации

Как измерять количество информации? Для этого нужно иметь универсальный способ, позволяющий представить любую ее форму (текстовую, графическую и др.) в едином стандартном виде.

За такой способ принята так называемая двоичная форма представления информации. Она заключается в записи любой информации в виде последовательности только двух символов: 0 и 1 (то есть в виде двоичных чисел) и с технической точки зрения наиболее проста и удобна (есть ток/нет тока, намагничено/размагничено, высокое напряжение/низкое напряжение).

Рассмотрим сначала одноразрядное двоичное число – бит. Оно может принимать два различных значения: 0 и 1

Если с помощью одноразрядного числа попробовать закодировать какую-либо информацию (например, ответ на вопрос «идет ли дождь?»), то мы успешно справимся с поставленной задачей, поскольку количество различных вариантов кодирования в данном случае равно двум (0-не идет, 1-идет).

К = 2 n °, где n – число разрядов двоичного числа.

В общем случае, верно, что чем больше различных видов однотипной информации требуется закодировать, тем больше разрядов двоичного числа (бит) требуется.

Единицы измерения информации

Таким образом, можно утверждать: информацию можно измерять в битах, то есть в количестве двоичных разрядов. Бит является наименьшей единицей измерения количества информации.

Представление текстовой информации в компьютере. Кодовые таблицы

Каждому символу ставится в соответствие двоичное число, причем таким образом, что чем дальше символ расположен от начала алфавита, тем больше значение двоичного числа, которое является кодом данного символа. Сколько разрядов (бит) требуется, чтобы закодировать все буквы, знаки препинания, математические и специальные символы? Легко подсчитать:

  • кириллица (большие и малые буквы) - 66;
  • латинские (большие и малые буквы) - 52;
  • цифры - 10;
  • знаки препинания (. , : ; ‘ « ! ? -) - 9;
  • знаки математических операций (+ - * / ^) - 5.

Таблица кодирования ASCII

Как мы уже выяснили, традиционно для кодирования одного символа используется 8 бит. И, когда люди определились с количеством бит, им осталось договориться о том, каким кодом кодировать тот или иной символ, чтобы не получилось путаницы, т.е. необходимо было выработать стандарт – все коды символов сохранить в специальной таблице кодов. В первые годы развития вычислительной техники таких стандартов не существовало, а сейчас наоборот, их стало очень много, но они противоречивы. Первыми решили эти проблемы в США, в Институте стандартизации. Этот институт ввел в действие таблицу кодов ASCII (American Standard Code for Information Interchange – стандартный код информационного обмена США).

Рассмотрим таблицу кодов ASCII:






Таблица ASCII разделена на две части. Первая – стандартная – содержит коды от 0 до 127. Вторая – расширенная – содержит символы с кодами от 128 до 255.

Первые 32 кода отданы производителям аппаратных средств и называются они управляющие, т.к. эти коды управляют выводом данных. Им не соответствуют никакие символы.

Коды с 32 по 127 соответствуют символам английского алфавита, знакам препинания, цифрам, арифметическим действиям и некоторым вспомогательным символам.

Коды расширенной части таблицы ASCII отданы под символы национальных алфавитов, символы псевдографики и научные символы.

Все буквы расположены в них по алфавиту, а цифры – по возрастанию. Этот принцип последовательного кодирования позволяет определить код символа, не заглядывая в таблицу.

Коды цифр берутся из этой таблицы только при вводе и выводе и если они используются в тексте. Если же они участвуют в вычислениях, то переводятся в двоичную систему счисления.

Альтернативные системы кодирования кириллицы

  • Система кодирования КОИ-7 (код обмена информацией, семизначный), действовавшая в СССР. Была вскоре вытеснена американским кодом ASCII во вторую, расширенную часть системы кодирования с кодами от 128 по 255.
  • Кодировка Windows-1251. Была введена извне компанией Microsoft Так как программный продукт этой компании – операционная система Windows глубоко закрепилась и широко распространилась, то кодировка Windows-1251 получила широкое применение на компьютерах, работающих под управлением именно этой операционной системы.
  • Кодировка КОИ-8 широко распространена на территории России и в российском секторе Интернета.
  • Кодировка ISO (International Standard Organization — Международный институт стандартизации) – содержит символы русского алфавита, но на практике используется редко.
  • Кодировка ГОСТ – альтернативная. Действует на компьютерах в операционных системах MS-DOS.

Таблица Unicode разделена на несколько областей. Область с кодами от 0000 до 007F содержит символы набора Latin 1 (младшие байты соответствуют кодировке ISO 8859-1). Далее идут области, в которых расположены знаки различных письменностей, а также знаки пунктуации и технические символы. Часть кодов зарезервирована для использования в будущем (29000). 6000 кодовых комбинаций оставлено программистам.

Символам кириллицы выделены коды в диапазоне от 0400 до 0451.

Использование Unicode значительно упрощает создание многоязычных документов, публикаций и программных приложений.

Решение задач

1. Закодируйте с помощью ASCII слово: МИР

Решение: открываем таблицу ASCII,
по таблице ищем букву М, её код 204
по таблице ищем букву И, её код 200
по таблице ищем букву Р, её код 208

Ответ: код слова МИР – 204 200 208

2. Декодируйте тексты, заданные десятичным кодом: 192 203 195 206 208 200 210 204

Решение: открываем таблицу ASCII, в таблице ищем коды и соответствующую им букву:
192 – А; 203 – Л; 195 – Г; 206 – О; 208 – Р; 200 – И; 210 – Т; 204 – М, т. е. получили слово: АЛГОРИТМ

Ответ: 192 203 195 206 208 200 210 204 – АЛГОРТИМ

3. Десятичный код буквы «I» в таблице ASCII равен 73. Не пользуясь таблицей, составьте последовательность кодов, соответствующих слову MIR

Решение: Зная, что все буквы расположены по алфавиту, а цифры по возрастанию делаем следующие выводы: I – 73, J – 74, K – 75, L – 76, M – 77, N – 78, O – 79, P – 80, Q – 81, R – 82

Ответ: MIR – 77 73 82

4. Каков информационный объём текста, содержащего слово МИР:

Зная, что в 16-битовой кодировке 1 символ – 16 бит делаем следующие выводы:
МИР – 3 символа = 48 бит (3*16)

Ответ: а) 48 бит; б) 24 бит.

5. Текст занимает полных 2 страницы. На каждой странице размещается 45 строк по 45 символов. Определить объём оперативной памяти, который займёт этот текст.

Решение: Мы знаем, что 1 символ – 8бит – 1 байт , значит нам нужно найти кол-во символов данного текста: 2 страницы*45 строк*45 символов = 4050 символов = 4050 байт

Ответ: 4050 байт

Кодирование графической информации

Общие понятия о графической информации

Графическая информация представляет собой изображение, сформированное из определенного числа точек – пикселей. Добавим к этой информации новые сведения. Процесс разбиения изображения на отдельные маленькие фрагменты (точки) называется пространственной дискретизацией. Ее можно сравнить с построением рисунка из мозаики. При этом каждой мозаике (точке) присваивается код цвета.

От количества точек зависит качество изображения. Оно тем выше, чем меньше размер точки и соответственно большее их количество составляет изображение. Такое количество точек называется разрешающей способностью и обычно существуют четыре основных значений этого параметра: 640x480, 800x600, 1024x768, 1280x1024.

Качество изображения зависит также от количества цветов, т.е. от количества возможных состояний точек изображения, т.к. при этом каждая точка несет большее количество информации. Используемый набор цветов образует палитру цветов.

Кодирование цвета

Рассмотрим, каким образом происходит кодирование цвета точек. Для кодирования цвета применяется принцип разложения цвета на составляющие. Их три: красный цвет (Red, R), синий (Blue, В) и зелёный (Green, G). Смешивая эти составляющие, можно получать различные оттенки и цвета – от белого до черного.

Сколько бит необходимо выделить для каждой составляющей, чтобы при кодировании изображения его качество было наилучшим?

Если рисунок черно-белый, то общепринятым на сегодняшний день считается представление его в виде комбинации точек с 256 градациями серого, т.е. для кодирования точки достаточно 1 байта.

Если же изображение цветное, то с помощью 1 байта можно также закодировать 256 разных оттенков цветов. Этого достаточно для рисования изображений типа тех, что мы видим в мультфильмах. Для изображений же живой природы этого недостаточно. Если увеличить количество байт до двух (16 бит), то цветов станет в два раза больше, т.е. 65536. Это уже похоже на то, что мы видим на фотографиях и на картинках в журналах, но все равно хуже, чем в живой природе. Увеличим еще количество байтов до трех (24 бита). В этом случае можно закодировать 16,5 миллионов различных цветов. Именно такой режим позволяет работать с изображениями наилучшего качества.

Количество бит, необходимое для кодирования цвета точки называется глубиной цвета. Наиболее распространенными значениями глубины цвета являются 4, 8, 16 и 24 бита на точку.

Количество цветов можно вычислить по формуле: N=2 I , где I – глубина цвета.

  • 00000000 – минимальная интенсивность, соответствующая полному отсутствию данного цвета;
  • 11111111 – максимальная интенсивность, соответствующая присутствию данного цвета целиком;
  • 11110000 – средняя интенсивность, соответствующая более светлому оттенку данного цвета.

Решение задач

1. Какой объём видеопамяти необходим для хранения четырёх страниц изображения при условии, что разрешающая способность дисплея равна 640Х480 точек, а используемых цветов – 32?

  • RS – разрешающая способность (в нашем случае RS = 640Х480);
  • I – глубина (в нашем случае – неизвестно);
  • KS – количество страниц (в нашем случае KS = 4).

Для нахождения I воспользуемся формулой: N=2 I ,
где I – глубина цвета,
N – количество цветов (у нас 32).
Следовательно: 32 = 2 I и значит I = 5 бит.

Теперь все параметры нам известны, находим объём:

V = 640*480*5*4 =6144000 бит = 750 Кбайт (т.к. в 1 байте – 8 бит и в 1 Кбайте – 1024 байт)

Ответ: 750 Кбайт

2. 256-цветный рисунок содержит 1 Кбайт информации. Из скольки точек он состоит?

Решение: Найдём информационный объём одной точки: N = 2 I , 256 = 2 I , I = 8 бит (глубина)

Переведём известный объём в биты: 1Кбайт = 1024 байт*8бит = 8192 бит

Зная глубину и объём находим количество точек на изображении: 8192:8 = 1024 точек

Ответ: 1024 точек

Кодирование звуковой информации

Оцифровка звука

Звук представляет собой звуковую волну с непрерывно меняющейся амплитудой и частотой. Для человека звук тем громче, чем больше амплитуда сигнала, и тем выше тон, чем больше частота сигнала. Непрерывный сигнал не несет в себе информации, поэтому он должен быть превращен в последовательность двоичных нулей и единиц – двоичный (цифровой) код.

Оцифровку звука выполняет специальное устройство на звуковой плате. Называется оно аналого-цифровой преобразователь (АЦП). Обратный процесс – воспроизведение закодированного звука производится с помощью цифро-аналогового преобразователя (ЦАП).

Весь процесс кодирования и декодирования представить в виде следующей схемы:

Схема кодирования звука:



В процессе кодирования непрерывного звукового сигнала производится дискретизация по времени, или, как говорят, «временная дискретизация». Звуковая волна разбивается на отдельные маленькие временные участки и для каждого участка устанавливается определенная величина амплитуд. Данный метод называется импульсно-амплитудной модуляцией РСМ Code Modulation).


Таким образом, гладкая кривая заменяется на последовательность «ступенек».. Каждой «ступеньке» присваивается значение громкости звука (1, 2, 3). Чем больше «ступенек», тем большее количество уровней громкости выделено в процессе кодирования, и тем большее количество информации будет нести значение каждого уровня и более качественным будет звучание.

Характеристики оцифрованного звука

Качество звука зависит от двух характеристик – глубины кодирования и частоты дискретизации. Рассмотрим эти характеристики.

Глубина кодирования звука (I) — это количество бит, используемое для кодирования различных уровней сигнала или состояний. Тогда общее количество таких состояний или уровней (N) можно вычислить по формуле: N=2 I .

Современные звуковые карты обеспечивают 16-битную глубину кодирования звука, и тогда общее количество различных уровней будет: N=2 16 = 65536.

Частота дискретизации (М) – это количество измерений уровня звукового сигнала в единицу времени. Эта характеристика показывает качество звучания и точность процедуры двоичного кодирования. Измеряется в герцах (Гц). Одно измерение за одну секунду соответствует частоте 1 Гц, 1000 измерений за одну секунду – 1 килогерц (кГц). Частота дискретизации звукового сигнала может принимать значения от 8 до 48 кГц. При частоте 8 кГц качество дискретизированного звукового сигнала соответствует качеству радиотрансляции, а при частоте 48 кГц – качеству звучания аудио-CD.

Высокое качество звучания достигается при частоте дискретизации 44,1 кГц и глубины кодирования звука, равной 16 бит. Для мрачного, приглушенного звука характерны следующие параметры: частота дискретизации – 11 кГц, глубина кодирования – 8 бит.

Решение задач

1. Определить объём памяти для хранения моноаудиофайла, время звучания которого составляет пять минут при частоте дискретизации 44 кГц и глубине кодирования 16 бит.

Решение: Воспользуемся формулой: V = M*I*t

В нашем случае М = 44 кГц = 44000 Гц
I = 16 бит
t = 5 минут,
подставляем в формулу и получаем:
V = 44000*16*5 = 3520000 бит = 430 Кбайт (примерно)

В данной статье пойдёт речь о кодировках в Windows. Все в жизни хоть раз использовали и писали консольные приложения как таковые. Нету разницы для какой причины. Будь-то выбивание процесса или же просто написать «Привет. Я не могу сделать кодировку нормальной, поэтому я смотрю эту статью!».

Тем, кто ещё не понимает, о чём проблема, то вот Вам:

image



А тут было написано:


Но никто ничего не понял.

В любом случае в Windows до 10 кодировка BAT и других языков, не использует кодировку поддерживающую Ваш язык, поэтому все русские символы будут писаться неправильно.

1. Настройка консоли в батнике

Сразу для тех, кто пишет chcp 1251 лучше написать это:


Первый способ устранения проблемы, это Notepad++. Для этого Вам нужно открыть Ваш батник таким способом:

image

Не бойтесь, у Вас откроется код Вашего батника, а затем Вам нужно будет сделать следующие действия:

image

Если Вам ничего не помогло, то преобразуйте в UTF-8 без BOM.

2. Написание консольных программ
Нередко люди пишут консольные программы(потому что на некоторых десктопные писать невозможно), а кодировка частая проблема.

Первый способ непосредственно Notepad++, но а если нужно сначала одну кодировку, а потом другую?

Сразу для использующих chcp 1251 пишите это:


Второй способ это написать десктопную программу, или же использовать Visual Studio. Если же не помогает, то есть первое: изменение кодировки вывода(Пример на C++).


Если же не сработает:


3. Изменение chcp 1251
Если же у Вас батник, то напишите в начало:


Теперь у Нас будет нормальный вывод в консоль. На других языках (С++):


4. Сделать жизнь мёдом
При использовании данного способа Вы не сможете:

В начале 90-х, когда произошел развал СССР и границы России были открыты, к нам стали поступать программные продукты западного производства. Естественно, все они были англоязычными. В это же время начинает развиваться Интернет. Остро встала проблема русификации ресурсов и программ. Тогда и была придумана русская кодировка Windows 1251. Она позволяет корректно отображать буквы славянских алфавитов:

  • русского;
  • украинского;
  • белорусского;
  • сербского;
  • болгарского;
  • македонского.

Разработка велась русским представительством Microsoft совместно с компаниями «Диалог» и «Параграф». За основу были взяты самописные разработки, которые в 1990-91гг имели хождение среди немногочисленных идеологов ИТ в России.

На сегодняшний день разработан более универсальный способ кодировать символы - UTF-8 (Юникод). В нем представлено почти 90% всех программных и веб-ресурсов. Windows 1251 применяется в 1,6% случаев. (Информация по исследованиям Web Technology Surveys)


Кодировка сайта utf 8 или Windows 1251?

Чтобы ответить на этот вопрос, необходимо немного понять, что такое кодировка и чем они отличаются. Текстовая информация, как впрочем, и любая другая, в компьютере хранится в закодированном виде. Нам легче представить ее как числа. Каждый символ может занимать один или более байт. Windows 1251 является однобайтной кодировкой, а UTF-8 восьмибайтной. Это значит, что в Windows 1251 можно закодировать всего 256 символов.
Так как все сводится к двоичной системе исчисления, а байт – это 8 бит (0 и 1), то и максимальное число сочетаний составляет 28 = 256. Юникод позволяет представлять куда большее число символов, да и на каждый может быть выделен больший размер.

Отсюда и следуют преимущества Юникода:

Вам может быть интересно: Установка на несовместимый компьютер

Таблица кодировки Windows 1251

Для программистов и разработчиков сайтов бывает необходимо знать номера символов. Для этого используются специальные таблицы кодировки. Ниже представлена таблица для Windows 1251.


Что делать, если слетела кодировка командной строки?

Почти полтора месяца писала данную статью, но надеюсь оно того стоило. Данная статья может выглядеть холиварной, поэтому не спешите писать комментарии пока не прочитаете полностью. Статья главным образом о методологии.

Дело в том, что я твёрдо уверена, что в учебных заведениях по информационной специальности, школьникам и студентам забивают голову историей древнего мира вместо актуальных знаний. Все методички преподают дамы бальзаковского возраста, а пишут эти методички профессора возраста Карла Маркса. В результате от соискателей на работу, и от стажёров, я слышала такие забавные заблуждения, относительно фундаментальных основ, как:

  • в байте 1024 бита
  • в байте 8 бит потому что 8 — степень двойки
  • бит принимает всякие разные значения от 0 до 1

В этой статье, я хочу коснуться проблемы заблуждений с битами и байтами, и написать свою методику обучения этим фундаментальным знаниям.

Итак… сперва я хочу написать определения из википедии методичек, которые являются догмой в умах профессоров из мин.образования.

  • Бит — это двоичный логарифм вероятности равновероятных событий или сумма произведений вероятности на двоичный логарифм вероятности при равновероятных событиях; (или другими словами) бит — это единица информации, равная результату эксперимента, имеющему два исхода
  • Бит — минимальная единица информации.
  • Байт — минимальная адресуемая единица информации.

Из-за этих определений, в умах будущих программистов ЭВМ, больше каши, чем из-за каких-либо других определений! Они совершенно истинны, но совершенно бесполезны для обучения. Я превращаюсь в Халка, когда слышу их.

Про биты

Итак, дети, садитесь, урок первый, представьте себе выключатель. Нет, не двоичный логарифм вероятности… А обычный такой выключатель, тумблер, рычажок, что угодно, включающее например лампочку, когда находится в одном положении и выключающее в другом. На некоторых рычажках даже подписывают буковки I/O, как указатели положений ручки. Нет, выключатель не несёт в себе информацию. Он выключает свет.

У выключателя есть два положения — вкл/выкл. Если мы поставим рядом два выключателя, то количество комбинаций позиций, которое могут занимать их ручки — четыре. (Когда оба выключены, когда оба включены, и две комбинации когда включен только один из них). Если мы возьмём систему из трёх выключателей — они смогут занимать восемь комбинаций. И так далее, N выключателей имеют 2^N комбинаций. Выключатель который имеет только два положения (вкл/выкл) мы можем назвать битом. Если мы представим, что положениям вкл/выкл соответствуют числа 1 и 0, то можно легко записать какое-нибудь целое число в двоичной системе счисления, используя только последовательный набор выключателей, так чтобы каждый выключатель отвечал за свой двоичный разряд.

Безусловно выключатели мы можем применить к магнитной дорожке, или оптическому диску, так, чтобы при помощи специального устройства можно было «включать» или «выключать» их маленькие участки. Теперь мы наконец подошли к тому, что все компьютерные запоминающие устройства состоят из «ноликов и единичек».

Однако, в этих ноликах и единичках нам надо хранить информацию. Какую же информацию нам можно хранить? Давайте рассмотрим один бит. Мы можем условно договориться, что он может хранить информацию, и два его состояния вкл/выкл содержат значения «баклажан» и «не баклажан» соответственно. Это отлично подходит, когда нам надо произвести учёт баклажанов! Однако в реальном мире компьютеры, которые умеют только считать баклажаны — не пользуются спросом. Выходит выключатель (бит) не может нести в себе информацию. Чтобы записывать ноликами и единичками какую-то информацию, было решено группировать их по несколько штук, и такую группу называть байтом.

На заре компьютеров байты составляли 4, потом 5, потом 6 бит… Группа из 6 бит может принимать целых 64 значений. Вполне неплохо, так как можно создать некую таблицу соответствий этих значений определённым символам — кодировку. Такая кодировка уже может содержать цифры и заглавные буквы латинского алфавита, а также некоторые арифметические знаки. «Шестибитные-кодировки» — применялись на компьютерах в 1950-х — 1960-х годах.

Для человека который только начинает изучать информатику, будет понятно и легко запомнить что байт — является минимальной единицей информации. В байт можно записать какое-нибудь число, либо например какой-нибудь символ из таблицы символов (англ. charset, буквально «набор символов») — кодировки (codepage, encoding).

С развитием компьютеров, появилась потребность в большем количестве значений для байта. В 1963-м году появилась первая редакция семибитной кодировки ASCII. Поэтому байты стали занимать 7 бит. 7 бит, требующиеся для одного символа данной кодировки позволяют использовать 128 значений. В этой кодировке уже были включены строчные латинские символы, и больший набор управляющих и арифметических символов.

Всемирное распространение компьютеров подтолкнуло дальнейшее расширение границ занимаемых байтом. Для различных языков требовалось чтобы таблица символов также могла хранить алфавит того языка, где используется данная ЭВМ. На текущий момент восемь — это последнее и видимо окончательное количество бит составляющих байт. Соответственно байт может принимать 256 значений. По сравнению с таблицей ASCII в. новых таблицах символов — организовалось 128 вакантных мест. Теперь я думаю можно рассказать как значения хранятся в различных кириллических кодировках.

Кодировки

Итак, чтобы хранить символы не входящие в ASCII, необходимо было придумать новые кодировки. Поскольку до этого таблица ASCII была наиболее подходящей (были и другие), то она и пошла в основу новых кодировок. Поэтому следующие кодировки отличаются только значениями начиная с 80 (hex). Для наглядности оставлю только кириллические символы.

Кодировка cp866

Так выглядела наиболее популярная кодировка под DOS. Примечательно что файлы в этой кодировке до сих пор встречаются. Как правило среди устаревшей архивной информации, в программах WinRar, Блокнот и WordPad, до сих пор есть опции «открыть как текст DOS», впрочем последними двумя мало кто пользуется =).

Кодировка koi8 была примечательна тем, что русские буквы там располагались на позициях английских звуков из нижней половины (т. е. ASCII). Это когда-то давно позволяло смягчить переход со старых серверов понимающие только ascii на новые, что было актуально среди почтовых серверов. Смысл был в том что если отправленное вами письмо приходило на старый сервер, то пользователю оно показывалось как транслит, что позволяло хоть как-то понять текст письма.

Кодировка cp1251

Самая популярная у нас в России однобайтная кодировка, на сегодняшний день, это именно «windows-1251». Разумеется популярность её целиком обусловлена популярностью Windows среди других операционных систем. Возможностей кодировки вполне хватает для использования её в широком круге задач. Например движок моего блога, по-умолчанию, использует для работы именно данную кодировку.

Кодировка iso8859-5

Я не могу не упомянуть о кодировке ISO, Удивительно, но несмотря на то что её никто никогда не использовал, эта кодировка является единственной кодировкой имеющей статус стандарта.

На примере данных кодировок видно, как один байт может хранить какое угодно символьное значение русского и английского языков, а также цифр и знаков пунктуации.

Но что делать когда этого не достаточно?

Многобайтные кодировки

Если вам хочется создать кодировку которая бы имела коды одновременно для русского и греческого алфавита? Одним байтом тут не отделаться. Появилась задача разработать кодировку один знак которой может занимать больше чем один байт, так как два байта могут принимать уже 2^16 = 65536 значений, а четыре байта аж 4294967296. Поэтому сначала придумали стандарт кодирования символов — Юникод, который включал бы в себя максимально полный перечень символов которые может принимать один знак.

Первая версия Юникода (Unicode 1991 г.) представляла собой 16-битную кодировку с фиксированной шириной символа; общее число разных символов было 2 16 (65 536).

Вторая версия Юникода (UCS-2), стала называться UTF-16, она позволяла гораздо расширить количество возможных значений, также используя для символов 16-битные последовательности (т. е. по 2 или по 4 байта на символ).

Символы с кодами 0×0000.0xD7FF и 0xE000.0xFFFF представляются одним 16-битным словом, а символы с кодами 0×10000–0×10FFFF — в виде последовательности двух 16-битных слов. Количество символов, представляемых двумя 16-битными словами равно (2 20 ). Для представления символов с кодами 0×10000–0×10FFFF используется матрица перекодировки. Первое слово из двух переданных лежит в диапазоне 0xD800-0xDBFF, а второе — 0xDC00-0xDFFF. Именно этот диапазон значений не может встречаться среди символов, передаваемых с помощью одного 16-битного слова, так что расшифровка кодировки всегда однозначна. Ясно, что имеется как раз 2 10 * 2 10 = 2 20 таких комбинаций.

Википедия — UTS-2

Кодировка UTF-32 (UCS-4) использует по 32 бита, или 4 байта на хранение одного символа. Строго говоря, стандарт Unicode не описывает символы со значениями выше 2^21, так что хватило бы и трёх байт, на символ, вероятно компьютеры работают несколько быстрее с мелкими блоками памяти кратными двум, или для того чтобы в сектор диска попадало кратное количество символов. Так или иначе это единственная из многобайтных кодировок с постоянной длиной. Помимо недостатка — использования четырёх байт на символ, у неё есть и очевидное преимущество — возможность прямой адресации к N-ному символу. В других кодировках требуется последовательное вычисление позиции каждого символа. Поэтому текстовые редакторы, внутри себя хранят всю информацию в виде UCS-4.

В 1992 году Кеном Томпсоном и Робом Пайком был изобретён формат UTF-8. Он отличается тем, что он ASCII совместим, и значения из таблицы Юникода могут занимать от 1 до 4х символов.

Символы UTF-8 получаются из Unicode следующим образом:

Unicode UTF-8 Представленные символы
0×00000000 — 0×0000007F 0xxxxxxx ASCII, в том числе английский алфавит, простейшие знаки препинания и арабские цифры
0×00000080 — 0×000007FF 110xxxxx 10xxxxxx кириллица, расширенная латиница, арабский, армянский, греческий, еврейский и коптский алфавит; сирийское письмо, тана, нко; МФА; некоторые знаки препинания
0×00000800 — 0×0000FFFF 1110xxxx 10xxxxxx 10xxxxxx все другие современные формы письменности, в том числе грузинский алфавит, индийское, китайское, корейское и японское письмо; сложные знаки препинания; математические и другие специальные символы
0×00010000 — 0×001FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx музыкальные символы, редкие китайские иероглифы, вымершие формы письменности

Символы, в кодировке UTF-8, могут занимать до шести байт, но Unicode не определяет символов выше 0×10ffff , поэтому символы Unicode могут иметь максимальный размер в 4 байта в UTF-8.

Заключение

Вот собственно и всё что я хотела рассказать. Я считаю что очень интересно разбираться в том как работает компьютер, знать как хранятся в нём символы которые я набираю на клавиатуре, представлять насколько однобайтная кодировка например win-1251 (или utf-32 с фикс. длиной) работает быстрее со строковыми функциями и почему и т. п. Надеюсь статья вам понравилась.

Большое спасибо Википедии за возможность скопировать цитаты и таблицы, а то бы писала статью ещё месяц.

Все кто хочет узнать больше, также могут почитать про то в каком порядке записываются байты в кодировках UTF-16 и UTF-32 — в википедии тут и тут. А также что такое порядок байтов тут: Порядок_байтов. Также интересна будет статья Юникод в операционных системах Microsoft.

Читайте также: