Когда я выполняю простой поиск в Google по кодировке слова, один из повторяющихся результатов - convert into a coded form. Раньше я задавался вопросом, зачем мне кодированная форма текста. Что ж, если вы имеете дело с текстом на компьютере, вы обязательно должны знать, что такое кодировка. По крайней мере, наше частое использование электронных писем (отправка и получение), написание статей с кодом и все связанные с текстом проблемы подчеркивают тот факт, что мы должны знать, чтобы кодировать. На самом деле это очень простая идея.

Начнем с основ, компьютеры понимают только биты. На более высоком уровне это будет похоже на прогулку на Луну, если вы попросите компьютер сохранить «буквы», «числа», «картинки» или «видео». Ждать! Разве мы уже не используем их в компьютерах. Подождите еще немного! Хитрость в том, что для того, чтобы использовать биты для представления других вещей, отличных от битов (конечно), нужны правила. Правила преобразования определенного количества бит в представление чего-то значимого (например, букв, чисел, изображений, видео и т. Д.) Называются кодированием. Например, битовая комбинация 01100010011010010111010001110011 может использоваться для представления «битов» английского текста. На самом деле правила, которые это определяют, называются ASCII (американский стандартный код для обмена информацией). Это правило группирует вместе 8 битов и имеет определенные символы, сопоставленные каждому набору.

Если посмотреть на 01100010011010010111010001110011, становится ясно, что его длина составляет 32 бита. Разбивка его на 8 бит в соответствии с правилом означает, что у нас есть 4 разных символа, которые нужно вывести из него. Первые 8 - это 01100010. Это эквивалентно десятичному числу 98. Таблицу ASCII можно найти на http://www.asciitable.com/. Проверив сопоставление символов ASCII, вы поймете, что десятичное число 98 является кодировкой ASCII буквы b. Пройдя по всем битам справа налево, мы получаем слово биты. Очень интересно.

Посмотрев на веб-сайт таблицы ASCII, вы найдете все 128доступные символы, определенные в кодировке ASCII. Это то, что мы называем набором символов или charset, как вы, возможно, где-то видели (я, очевидно, не знаю). Итак, каков результат представления «Hello World» в ASCII?

01001000 01100101 01101100 01101100 01101111 00100000 01010111 01101111 01110010 01101100 01100100

Вы могли заметить, что мы использовали двоичный код для представления «Hello World». Мы могли бы сделать то же самое в восьмеричном, десятичном или даже шестнадцатеричном формате, чтобы упростить длину. Например, «Hello World» в шестнадцатеричном формате:

0x48656C6C6F20576F726C64

Я уверен, что вы думаете об этом. Применимо ли это к символам других языков, таких как французский, японский и тви (мой родной язык)? Вы могли догадаться, что французский символ, такой как é, не является частью набора символов 128, составляющих кодировку ASCII. Не беспокойся. Просто загляните в Википедию, и вы увидите набор доступных стандартов кодировки символов. В нашем современном мире есть поддержка всех языков под небом (я прав?).

Давайте погрузимся немного глубже. Почему мы начали с 256 символов? Предполагалось, что мы попытались закодировать каждый символ 8 битами (2^8=256). Это ограничивающий фактор. Может ли 256 все возможные символы быть представлены в этом наборе? Очевидно нет! Самое простое решение - изменить правило использования 8 бит. Если мы решим использовать 16 бит (2 байта), это означает, что теперь мы можем кодировать 2^16=65,536 уникальных символов. Довольно впечатляющий. Примером такой кодировки является BIG-5. Подробнее про здесь.

Сбивает с толку, но ясно!

Сначала я думал, что это конец кодирования, пока не встретил Unicode. Теперь это стало запутанным, но в то же время понятным. Какая ирония. Кто-то или группа людей решили создать одну таблицу, содержащую всех персонажей на Земле. Довольно храбрый, если вы спросите меня. И да, как-то ему это удалось. Вы можете спросить, сколько битов он использовал для представления персонажа. Может быть 16? Что ж, многие люди так считают, но это большая ложь.

В Юникоде символы отображаются не в биты, а в кодовые точки. Как эти кодовые точки фактически кодируются в биты, - это отдельный разговор. Но все 1,114,112 кодовые точки в стандарте Unicode по крайней мере содержат достаточно символов для представления всех языков на Земле. Список всех символов Unicode можно найти здесь. Очевидно, что 16 бит (2 байта) недостаточно для этого. Возможно, 32 бита (4 байта) - разумный способ хранить эти биты.

Но ждать! Буква A, которая соответствует кодовой точке 65, будет 00000000 00000000 00000000 01000001 с использованием 32 бита (4 байта). Ой! Похоже, что для представления буквы A было потрачено около 3 байтов. Любой документ вырастет как минимум в 4 раза больше необходимого.

Чтобы оптимизировать это, было разработано несколько типов кодировок символов Unicode. Вот так называемые типы Unicode Transformation Format (UTF). Таким образом, вместо того, чтобы тратить впустую пространство, UTF-8 будет использовать только 8 бит, тогда как UTF-32 будет использовать все 32 бита. Ух! Все снова счастливы.

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