Наш компьютер представляет все (текст, картинки, видео и т.д.) в виде единиц и нулей, однако он должен нам показывать все в нормальном виде. Мы ведь не поймем, что означает огромное количество непрерывных нулей и единиц.
Что такое UTF-8?
Ответ кроется в самой расшифровке аббревиатуры, а именно "Unicode Transformation Format, 8-bit", что буквально означает "формат преобразования Юникода". Сложно? Давай разбираться.
Двоичный код
Как мы уже поняли, Юникод и UTF-8 это не нечто раздельное. UTF-8 является лишь представлением Юникода в 8-битном виде. Самая простая и основная единица двоичного кода - это бит, который является 1 или 0. 8 бит, или байт, условно можно представить в виде 10011101.
ASCII
Американский стандартный код обмена информацией (ASCII) был ранней стандартизированной системой кодирования текста. Кодирование - это преобразование человеческих символов в двоичный код, который могут обработать компьютеры.
Библиотека ASCII включает все буквы в верхнем и нижнем регистре латинского алфавита (A, B, C…), каждую цифру от 0 до 9 и некоторые общие символы (например, /, !, ?). Он присваивает каждому из этих символов уникальный трехзначный код и уникальный байт.
Количество символов, которые может представлять ASCII, ограничено количеством доступных уникальных байтов, поскольку каждый символ получает один байт. Существует 256 различных способов группировки восьми единиц и нулей вместе. Это дает нам 256 различных байтов или 256 способов представления символа в ASCII.
Unicode
Когда ASCII был только представлен, все было хорошо, так как разработчикам, кроме символов английского языка, ничего не нужно было. Однако компьютеры распространялись и в других странах, где язык значительно отличался от английского. Именно поэтому был разработан стандарт Unicode для расширения кодировки ASCII. Как и ASCII, Unicode присваивает каждому символу уникальный код, называемый кодовой точкой. Однако более сложная система Unicode может генерировать более миллиона кодовых точек, чего более чем достаточно для учета каждого символа на любом языке. Юникод теперь является универсальным стандартом для кодирования всех человеческих языков. И да, он даже включает смайлы.
Теперь у нас есть стандартизированный способ представления каждого символа, используемого каждым человеческим языком, в единой библиотеке. Это решает проблему нескольких систем маркировки для разных языков – любой компьютер на Земле может использовать Unicode.
Но один только Unicode не хранит слова в двоичном формате. Компьютерам нужен способ перевода Unicode в двоичный код, чтобы его символы можно было хранить в текстовых файлах.
UTF-8
UTF-8 – это система кодирования Unicode. Он может преобразовывать любой символ Юникода в соответствующую уникальную двоичную строку, а также может преобразовывать двоичную строку обратно в символ Юникода. Отсюда и взялось "UTF" или "формат преобразования Юникода".
Для чего она существует?
В Unicode, со временем, стало не хватать места для размещения новых символов. Поэтому на основе Unicode создали кодировку UTF-8, которая исправила эти недостатки. UTF-8 позволяет кодировать до 2 миллиардов символов, поэтому она доминирует в интернете.
В UTF-8 коды от 0 до 127 используются для представления символов ASCII. Если символ не входит в набор ASCII, то старший бит первого байта устанавливается в 1, что свидетельствует о дополнительном использовании байтов. То есть если в документе используются только символы из ASCII, то каждый символ в UTF-8 будет кодироваться восьмью битами.
Какие еще бывают UTF?
Есть несколько разных видов UTF-стандартов. Они отличаются количеством байтов, используемых для кодирования одного кодового пункта. В UTF-8 используется один байт на кодовый пункт, в UTF-16 — 2 байта, в UTF-32 — 4 байта.
UTF-8 — самая распространенная кодировка в интернете. В HTML5 она определена как предпочтительная для новых документов.
Итоги
Теперь мы можем ответить на вопрос зачем писать кодировку UTF-8 в HTML? Да за тем, чтобы у нас не было проблем, не было непонятных инопланетных знаков, вместо букв и цифр.