Однобайтовые кодировки
До развития Юникода, символы национальных алфавитов, в том числе и кириллицы, кодировались с помощью одного байта. Получалась так называемая расширенная таблица ASCII символов, где первая часть таблицы была неизменной и содержала буквы латинского алфавита и некоторые вспомогательные знаки, а во второй части (начиная с 128) располагались буквы национальных алфавитов.
Для кириллицы существовало несколько отображений символов на эту вторую часть таблицы, наиболее известными из которых были KOI-8, Windows 1251, cp866, ISO 8859-5.
Многобайтовые кодировки
Набор символов Unicode пришедший на смену ASCII набору изначально уже предполагал порядка 64 тыс. символов (в первых версиях). Каждый национальный символ в таком наборе имел свой индивидуальный код. Последовательность кодов кириллических символов в Unicode совпадает с последовательностью в кодировке ISO 8859-5. Диапазон кириллических символов начинается с 1024 (0400 hex), то есть сдвинут по сравнению с кодами ISO 8859-5 на 864 позиции (0360 hex).
Закодировать 64 тыс. символов в одном байте нельзя и на смену однобайтовых кодировок пришли многобайтовые. Наиболее известная многобайтовая кодировк utf-8. Правила кодирования символов в utf-8 предполагают перенесение двоичного кода Unicode символа в специальные «хвосты» многобайтовой кодировки. Для кодирования ASCII набора хватает «хвоста» одного байта. Для кодирования кириллического диапазона используются «хвосты» двух байтов. Например, русская буква п будет представлена в utf8 как последовательность байтов 11010000 10111111. То есть, взят код символа п в кодировке ISO 8859-5 — 223, затем прибавлено число — 864 и получен, таким образом, unicode для этого символа — 1087. Этот unicode переводится в двоичный вид: 10000111111 и загоняется в хвосты двух байтов 110xxxxx 10xxxxxx, начиная с конца.
Отображение символов браузерами
Современные браузеры обычно поддерживают отображение всех 64 тыс. символов начального диапазнона Unicode. При отображении символов браузер может руководствоваться либо установленной кодировкой и байтами символов, либо мнемоническим именем символа или его HTML ссылкой с уникодом символа. Последние два способа независимо от выбранной кодировки будут отображать символы одинаково.
Кодировщик html символов
Разработанный нами инструмент для кодирования html символов отличается от традиционных перекодировщиков возможностями кодировать и раскодировать символы в их мнемонические html имена и ссылки. Кроме того он определяет значение байтов в кодировках, что позволяет применять его в других местах, например, для кодирования и раскодирования URL.
Примером работы кодировщика является данный абзац, он будет выглядеть одинаково независимо от кодировки браузера.
Буду рад комментариям и замечаниям по работе кодировщика.
Вообще Юникод — это удачное решение для интернациональной таблицы символов.