Кодировка символов и Юникод: что нужно знать разработчику

Кодировщик символов в HTML коды

Основные возможности кодировщика

  • Выбор кодировки — нажатие на кнопку GO меняет кодировку страницы, но текст внутри окон: Cтрока в нормальнов виде и Cтрока в закодированном виде может меняться непредвиденным образом (вернее везде есть своя логика, но не совсем тревиальная). Это дает возможность насладиться разными «Крякозябрами», но может быть полезно и для перекодировки кириллицы. Будьте внимательны изменение в выпадающем списке кодировок не будут иметь силу, если кнопка GO не будет нажата.
  • Кодирование символов, имеющих специальное назначение в html — опция заменяет символы < > & » ' мнемоническими ссылками html, используется для безопасной вставки фрагмента html кода в виде текста в html страницу .
  • Кодирование символов, для которых есть мнемонические имена — опция заменяет все символы html, для которых определены мнемонические имена, их мнемоническими html ссылками, опция помогает быстро узнать название того или иного знака.
  • Кодирование всех символов — опция кодирует любые символы с помощью html ссылок с кодом символа (unicode). Так как отображение символов, заданных с помощью html ccылок одинаково, в любых кодировках, то эта опция позволяет получить кириллический текст, не зависящий от установок кодовой страницы браузера. Если будет нажат значок Исключая диапазон latin1, то ASCII символы кодироваться не будут (первые 127 символов диапазона UNICODE). Эта опция позволяет шифровать содержимое HTML, не нарушая разметку.
  • Побайтное представление — опция выдает байты строк, как в шестнадцатиричном представлении, так и в десятичном. Для мультибайтовой кодировки utf-8, каждый кириллический символ кодируется двумя байтами. Эта опция может быть полезна, для анализа строк и выявления неисправностей. Она совместима с режимом кодирования для URL.
  • Кодирование в base64 — опция применяется для кодирования в MIME base64.

Теоретические основы кодирования и комментарии к работе программы читайте в статье о принципах работы html кодировщика. Для просмотра начального диапазона символов Unicode (первые 64К) можно воспользоваться динамической таблицей символов блоков Unicode. Для изучения основ Unicode воспользуйтесь официальной документацией на Unicode (на английском).

👉 Эта ста­тья — для рас­ши­ре­ния кру­го­зо­ра. Если нуж­на прак­ти­ка, захо­ди­те в раз­дел «Это баг», там вагон практики.

«Дан­ные зако­ди­ро­ва­ны» и «дан­ные зашиф­ро­ва­ны» — это не одно и то же. После этой ста­тьи вы тоже смо­же­те раз­ли­чать эти два под­хо­да к данным.

Кодирование 

Коди­ро­ва­ние — это пред­став­ле­ние дан­ных в каком-то виде, с кото­рым удоб­но рабо­тать чело­ве­ку или компьютеру. 

Коди­ро­ва­ние нуж­но для того, что­бы все, кто хочет, мог­ли полу­чать, пере­да­вать и рабо­тать с дан­ны­ми так, как им хочет­ся. Бла­го­да­ря коди­ро­ва­нию мы можем обме­ни­вать­ся дан­ны­ми меж­ду собой — мы про­сто коди­ру­ем их в понят­ном для всех виде. 

Напри­мер, древ­ний чело­век видит вол­ка, это для него дан­ные. Ему нуж­но пере­дать дан­ные сво­е­му пле­ме­ни. Он про­из­но­сит какой-то звук, кото­рый у дру­гих его сопле­мен­ни­ков вызы­ва­ет ассо­ци­а­ции с поня­ти­ем «волк» или «опас­ность». Все моби­ли­зу­ют­ся. В нашем слу­чае звук — это был спо­соб кодирования.

image Сло­во «волк» и сопут­ству­ю­щий ему звук — это вид коди­ро­ва­ния. Сам волк может не исполь­зо­вать такую кодировку 

Для сле­ду­ю­ще­го при­ме­ра возь­мём бук­ву «а». Её мож­но про­из­не­сти как звук — это зна­чит, что мы зако­ди­ро­ва­ли эту бук­ву в виде зву­ко­вой вол­ны. Так­же эту бук­ву мож­но напи­сать про­пи­сью или в печат­ном виде. Всё это при­ме­ры коди­ро­ва­ния бук­вы «а», удоб­ные для человека. 

image

В ком­пью­те­ре бук­ва «а» коди­ру­ет­ся по-разному, в зави­си­мо­сти от выбран­ной коди­ров­ки внут­ри опе­ра­ци­он­ной системы:

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

Сломанная кодировка

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

Похо­жая ситу­а­ция в ком­пью­те­ре. Допу­стим, вы уви­де­ли такой текст: 

рТЙ­ЧЕФ, ЬФП ЦХТОБМ лПД!

Здесь напи­са­но «При­вет, это жур­нал Код!», толь­ко в коди­ров­ке КОИ-8, кото­рую интер­пре­ти­ро­ва­ли через коди­ров­ку CP-1251. Ком­пью­тер не знал, какая здесь долж­на быть коди­ров­ка, поэто­му взял стан­дарт­ную для него CP-1251, посмот­рел сим­во­лы по таб­ли­це и выдал то, что полу­чи­лось. Если бы ком­пью­тер знал, что для этой коди­ров­ки нуж­на дру­гая таб­ли­ца, мы бы всё про­чи­та­ли пра­виль­но с пер­во­го раза.

Ещё кодирование

Коди­ро­ва­ни­ем поль­зу­ет­ся весь мир на про­тя­же­нии всей сво­ей истории:

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

👉 Коди­ро­ва­ние нуж­но для того, что­бы сде­лать дан­ные мак­си­маль­но понят­ным для полу­ча­те­ля и для всех, кто тоже исполь­зу­ет такие же обозначения.

Шифрование 

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

Зада­ча шиф­ро­ва­ния — пре­вра­тить дан­ные, кото­рые могут про­чи­тать все, в дан­ные, кото­рые может про­чи­тать толь­ко тот, у кого есть спе­ци­аль­ное зна­ние (ключ без­опас­но­сти, сер­ти­фи­кат, пароль или рас­шиф­ро­воч­ная мат­ри­ца). Если паро­ля нет, то дан­ные внешне пред­став­ля­ют из себя пол­ную бес­смыс­ли­цу, например:

d73(5n-24^gj2*3=sdn%4^e

Здесь зашиф­ро­ва­на та же самая фра­за — «При­вет, это жур­нал Код!». Но не зная клю­ча для рас­шиф­ров­ки и прин­ци­па шиф­ро­ва­ния, вы не смо­же­те её прочитать. 

Шиф­ро­ва­ние нуж­но, напри­мер, что­бы пере­дать дан­ные от одно­го к дру­го­му так, что­бы по пути их никто не про­чи­тал. Шиф­ро­ва­ние используют:

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

Шиф­ро­ва­ние быва­ет ана­ло­го­вое и ком­пью­тер­ное, про­стое и слож­ное, взла­мы­ва­е­мое и нет. Обо всём этом ещё рас­ска­жем, подписывайтесь.

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

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

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

Стандарты кодирования.

Первый широко известный стандарт кодирования текста был принят в 1963 году и получил название ASCII (American Standard Code for Information Interchange) – американский стандартный код для обмена информацией). Таблица кодирования содержала символы латинского алфавита, цифры, набор управляющих символов и некоторые знаки препинания.

Таблица 1. Кодировка ASCII

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

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

Изначально в стандарте ASCII использовался семиразрядный двоичный код. Всего можно было закодировать 27 = 128 символов. Затем, код ASCII расширили за счет добавления 8-го бита (28 = 256 символов). Первая половина восьмиразрядной кодировки совпадает с ASCII, а во второй, получившей название кодовой страницы (CP – code page), — содержатся представления символов национальных алфавитов и некоторых других знаков. Для русского языка в разных операционных системах используются свои кодовые страницы, например, Windows — CP1251, MS DOS – CP866.

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

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

Время от времени приходится сталкиваться с текстом в непонятной кодировке, типа такого:

Ëþäè â Ãðîóâëåíäå, ìàëåíüêîì (ïî ìåðêàì Êàëèôîðíèè) ãîðîäêå â øåñòüñîò æèòåëåé, âûõîäèëè íà óëèöû, ñòîÿëè ïåðåä ñâîèìè äîìàìè ñ öâåòàìè íà ïîäîêîííèêàõ è ñìîòðåëè, êàê ýòîò ïèðîêóìóëþñ âûðàñòàåò âûøå Ñüåððû-Íåâàäû. ß è ñàìà ñòîÿëà òàì â áëàãîãîâåíèè è óæàñå è ïîíèìàëà áåç âñÿêèõ ñëîâ, ÷òî åñëè íå ïîéäåò äîæäü, òî ñëåäóþùèå ïîæàðû áóäóò åù¸ óæàñíåå, à åñëè äîæäè âñ¸ æå ïîéäóò è îêàæóòñÿ ñëèøêîì îáèëüíûìè, òî ýòî ñîææ¸ííûå ãîðíûå ñêëîíû ñìîåò íàâîäíåíèÿìè. Âñ¸ áûëî áóêâàëüíî íà ãðàíè êàòàñòðîôû. Íî ðÿäîì áûëè öâåòû â ãîðøêàõ, è íåîáîææ¸ííûå ñîñíû, è òðóùèåñÿ î íîãè ñîáàêè, è ðåñòîðàí, îòêðûòûé äëÿ óæèíà; è ÷óâñòâîâàëîñü, ÷òî âñå íà óëèöå âçäûõàþò ñ áëàãîäàðíîñòüþ çà òî, ÷òî âñ¸ ýòî ó íèõ åù¸ åñòü. Õîòÿ áû íåíàäîëãî (Äèàíà Ìàðêóì, Äåñÿòûé îñòðîâ).

Если текст маленький, то поможет онлайн-декодер, а если текст большой — поможет текстовый редактор. Я использую Sublime Text, подозреваю что этот трюк возможен и в других текстовых редакторах, которые умеют работать с разными кодировками.

В любом случае, начните с онлайн-декодера, чтобы понять с какими кодировками нужно работать. Раскодируйте фрагмент текста и запомните направление декодирования (в нашем случае: ISO-8859-1 → Windows-1251):

Вся дальнейшая работа будет проходить в текстовом редакторе.

Шаг 1. Создайте обычный пустой текстовый файл, сохраните его с кодировкой Western (ISO 8859-1):

Шаг 2. Скопируйте текст с кракозябрами и вставьте его в созданный файл:

Шаг 3. Сохраните файл (Ctrl + S).

Шаг 4. Откройте файл с кодировкой Cyrillic (Windows 1251):

Шаг 5. Наслаждайтесь результатом:

Тот же текст в читаемом виде.

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

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

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

Кодирование чисел

Числовую информацию компьютер обрабатывает в двоичной системе счисления. Таким образом, числа в компьютере представлены последовательностью цифр 0 и 1, называемых битами (бит – один разряд двоичного числа). В начале 1980-х гг. процессоры для персональных компьютеров были 8-разрядными, и за один такт работы процессора компьютер мог обработать 8 бит, т.е. максимально обрабатываемое десятичное число нс могло превышать 111111112 (или 25510). Последовательность из восьми бит называют байтом, т.е. 1 байт = 8 бит. Затем разрядность процессоров росла, появились 16-, 32- и, наконец, 64-разрядные процессоры для персональных компьютеров, соответственно возросла и величина максимального числа, обрабатываемого за один такт.

Использование двоичной системы для кодирования целых и действительных чисел позволяет с помощью 8 разрядов кодировать целые числа от 0 до 255, 16 бит дает возможность закодировать более 65 тыс. значений.

В ЭВМ применяются две формы представления чисел:

  • естественная форма, или форма с фиксированной запятой. В этой форме числа изображаются в виде последовательности цифр с постоянным для всех чисел положением запятой, отделяющей целую часть от дробной, например +00456,78800; +00000,00786; -0786,34287. Эта форма неудобна для вычислений и применяется только как вспомогательная для целых чисел;
  • нормальная форма, или форма с плавающей точкой. В этой форме число выражается с помощью мантиссы и порядка как N = ±Оњ • Р±r, где Оњ – мантисса числа (|M| < 1), r – порядок числа (целое число), Р – основание системы счисления. Приведенные выше числа в нормальной форме будут представлены как +0,456788 • 103, +0,786 • 102, -0,3078634287 • 105.

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

В памяти ЭВМ для хранения чисел предусмотрены форматы: слово – длиной 4 байта, полуслово – 2 байта, двойное слово – 8 байт.

Разрядная сетка для чисел с плавающей запятой имеет следующую структуру:

  • • нулевой разряд – это знак числа;
  • • с 1-го по 7-й разряд – записывается порядок в двоичном коде;
  • • с 8-го по 31-й – указывается мантисса.

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

Двоичная система позволяет кодировать и текстовую информацию. Восемь двоичных разрядов достаточно для кодирования 256 различных символов.

Первым международным кодом стал стандартный 7-битный код ASCII (American Standard Code for Information Interchange – американский стандартный код для обмена информацией). Появление данного кода в 1963 г. сыграло значительную роль, поскольку до этого различные компьютеры просто не могли взаимодействовать друг с другом. Каждый производитель по-своему представлял символы алфавита, цифры и управляющие коды.

В одних только аппаратных средствах корпорации IBM использовалось девять различных наборов кодировки символов. Но взаимодействие между компьютерами стало настоятельной необходимостью. В 1961 г. комитет Американского национального института стандартов (ANSI), в котором была представлена боМЃльшая часть производителей компьютеров, приступил к разработке международного стандарта. Комитету понадобилось свыше двух лет, чтобы проанализировать позиции всех сторон, найти компромисс и завершить разработку универсального кода. Код ASCII стал общим знаменателем для компьютеров, которые ранее не имели друг с другом ничего общего. Всем буквам, цифрам, знакам препинания и другим символам (управляющим кодам) были поставлены в соответствие стандартные числовые значения. Код ASCII поддерживал 128 символов, включающих заглавные и строчные символы латиницы, цифры, специальные знаки и управляющие коды. Базовая таблица кодировки этого кода, начиная с 32-го кода, приведена в табл. 1.2. Коды 0Г·31 использованы в данной таблице как служебные и управляющие.

Затем 7-битный код ASCII был расширен до 256 символов и принят как 8-битный международный стандарт ASCII-2, причем коды с 128 по 256 этого стандарта были задействованы для национальных языков разных стран. Для СССР в этой области была введена национальная кодировка КОИ-8 (код обмена информацией, восьмизначный). Код ASCII остался одной из немногих технологий, которой удалось успешно пройти сквозь десятилетия и дожить до наших дней. Сегодня на основе кода ASCII выпускается оборудование стоимостью в миллиарды долларов, большинство операционных систем до сих пор совместимо с ASCII.

Существует несколько различных кодовых таблиц для русского алфавита. Так, кодировка Windows-1251 была введена компанией Microsoft и, учитывая широкое распространение операционной системы Windows и других программных продуктов компании в России, она получила широкое распространение и используется в персональных компьютерах (ПК), работающих на этой платформе. Текст,

Таблица 1.2

Базовая таблица кодировки ASCII

Код

Символ

Код

Символ

Код

Символ

Код

Символ

32

пробел

56

8

80

Р

104

h

33

!

57

9

81

Q

105

i

34

58

:

82

R

106

j

35

#

59

;

83

S

107

k

36

$

60

<</p>

84

т

108

1

37

%

61

=

85

и

109

m

38

&

62

>

86

V

110

n

39

63

?

87

W

111

о

40

(

64

@

88

X

112

P

41

)

65

А

89

Y

113

q

42

*

66

В

90

Z

114

r

43

+

67

С

91

[

115

s

44

,

68

D

92

116

t

45

69

Е

93

]

117

u

46

70

F

94

^

118

V

47

/

71

G

95

_

119

w

48

72

Н

96

120

x

49

1

73

I

97

A

121

y

50

2

74

J

98

B

122

z

51

3

75

К

99

c

123

{

52

4

76

L

100

d

124

|

53

5

77

М

101

е

125

}

54

6

78

N

102

f

126

~

55

7

79

О

103

g

127

созданный в одной кодировке, совершенно по-другому выглядит и не читается в другой. Например, коду 222 соответствуют разные символы в разных кодировках:

  • • КОИ-8 (операционная система UNIX) – ч;
  • • Windows-1251 (операционная система Windows) – Ю;
  • • ISO (стандарт для русского языка международной организации по стандартизации ISO) – О.

Последним стандартом в области кодирования текстовой информации считается 16-разрядный универсальный международный код Unicode (UNIversal CODE), позволяющий кодировать 65 536 различных символов. Unicode охватывает 28 тыс. букв, знаков, слогов и иероглифов национальных языков мира, и 30 тыс. мест в нем зарезервировано.

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
А как считаете Вы?
Напишите в комментариях, что вы думаете – согласны
ли со статьей или есть что добавить?
Добавить комментарий