Computer Science
May 28

Как работают кодировки

Конспект видео: https://www.youtube.com/watch?v=4MFcmreAUhs&list=PLIJLLSrXDPojDGKW0WZ7sU0eO3nyn0oDc&index=4&pp=iAQB

• Каждый символ соответствует числу. Чтобы понять какому - используется кодировка (таблица соответствия)

Коды символов

• То какому числу соответствует символ

ASCII

• Содержит английские буквы и служебные символы
• Занимает 7 бит, поэтому 1 бит всегда пустой и соответственно 128 значение пустует

Нехватка кодов

• Языков много, всех букв не было в аски

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

• Остальные 128 пустых значений каждая страна заполняла своими буквами и делала это как хотела + страниц могло быть несколько
• Всё усугубилось с развитием интернета.

Windows и ANSI

• American National Standarts Institute
• Когда появилась винда она расширила аски своими символами и назвала ansi
• На основе анси создавались кодовые страницы Windows-125X, где X - номер страны
• Было не уместить тысячи азиатских иероглифов

Unicode

• 1 символ = 2 байта => 65536 значений
• Для записи буквы принято было использовать 16-ричный формат: U+XXXX
• Проблема - расточительство: В англоязычных странах можно было использовать аски и экономить память в 2 раза
• Проблема- порядок хранения байтов: разные компьютеры хранили байты либо в LE, BE.
• Так появились Кодировки - правила хранения символов юникод в памяти

UCS-2

• Universal coded character set
• Перед символами шли 2 байта, котрые указывали на порядок хранения. Их назвали BOM байты
• Текст занимал ещё больше места из-за бом-байтов

UTF-8

• Unicode Transormation Format. 8 - минимальное кол-во бит для 1 символа
• Каждый символ кодируется разное кол-во байт. 1 байт для аски символов, для остальных от 2 до 4 байт
• В первом байте символа ставятся метки о том сколько байт нужно прочитать из памяти (где кончается символ). По этому можно было понять где начинается первый символ
• Проблема в том что код стал работать медленнее из-за обработки

Utf-16

• Совместим с 8 и может хранить более чем 2 байта
• Минимальная длина символа 2 байта, всё что больше = 4.
• Если символ из ютф8 = 3 байта, то он конвертируется в 4. Такое вычисление занимает время.
• Работает быстрее ютф8, но занимает больше места.
• Вернули бом-байты

UTF-32

• Каждый символ по 4 байта + бом-байты
• Используется только для скорости. Памяти занимает много

Резюме

• Ютф8 - маленький, Медленный - используется в интернете.
• Ютф16,32 - больше, быстрее - используется в языках программирования.
• Если вместо символов знаки вопроса, то символа нет в текущей кодировке

Строки в программировании

• В C в конце ставиться 00 из аски, чтобы указать на конец строки
• Неизменяемые - при изменении строки в памяти создаётся новая, а старая строка лежит в памяти, пока её не уберёт сборщик мусора