Как работают кодировки
Конспект видео: 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 из аски, чтобы указать на конец строки
• Неизменяемые - при изменении строки в памяти создаётся новая, а старая строка лежит в памяти, пока её не уберёт сборщик мусора