« 17 »  04  20 15 г.




Буквы в цифрах таблица

Для передачи символа и его корректного отображения ему должна соответствовать уникальная последовательность нулей и единиц. Для этого были разработаны таблицы кодировок. Количество символов, которые можно задать последовательностью бит длинызадается простой формулой. Таким образом, от нужного количества символов напрямую зависит количество используемой памяти. Это было связано с малым количеством оперативной памяти на компьютерах тех лет. В эти символа входили только управляющие символы и строчные буквы английского алфавита. С ростом производительности компьютеров стали появляться таблицы кодировок с большим количеством символов. Первой семибитной кодировкой стала ASCII7. В нее уже вошли прописные буквы английского алфавита, арабские цифры, знаки препинания. Затем на ее базе была разработана ASCII8, в которым уже стало возможным хранение символов: основных и еще столько же расширенных. Первая часть таблицы осталась без изменений, а вторая может иметь различные варианты каждый имеет свой номер. Эта часть таблицы стала заполняться символами национальных алфавитов. Но для многих языков например, арабского, японского, китайского символов недостаточно, поэтому развитие кодировок продолжалось, что привело к появлению UNICODE. Помимо маленьких букв английского алфавита и служебных символов, содержит большие буквы английского языка, цифры, знаки препинания и другие символы. Кодировки стандарта ASCII бит : ASCII — первая кодировка, в которой стало возможно использовать символы национальных алфавитов. КОИ8-R — первая русская кодировка. Символы кириллицы расположены не в алфавитном порядке. Их разместили в верхнюю половину таблицы так, чтобы позиции кириллических символов соответствовали их фонетическим аналогам в английском алфавите. Это значит, что даже при потере старшего бита каждого символа, например, при проходе через устаревший семибитный модем, текст остается "читаемым". CP866 — русская кодировка, использовавшаяся на компьютерах IBM в системе DOS. Windows-1251 — русская кодировка, использовавшаяся в русскоязычных версиях операционной системы Windows в начале 90-х годов. Кириллические символы идут в алфавитном порядке. Содержит все символы, встречающиеся в типографике обычного текста кроме знака ударения. Таким образом, двоично-десятичные числа BCD превращаются в ASCII-строку с помощью простого добавления слева к каждому двоично-десятичному полубайту. Буквы A-Z верхнего и нижнего регистров различаются в своём представлении только одним битом, что упрощает преобразование регистра и проверку на диапазон. Буквы представляются своими порядковыми номерами в алфавите, записанными в двоичной системе счисления, перед которыми стоит для букв верхнего регистра или для букв нижнего регистра. Unicode — это промышленный стандарт обеспечивающий цифровое представление символов всех письменностей мира, и специальных символов. Стандарт предложен в 1991 году некоммерческой организацией «Консорциум Юникода» англ. Unicode Consortium, Unicode Inc. Применение этого стандарта позволяет закодировать очень большое число символов из разных письменностей. Стандарт состоит из двух основных разделов: универсальный набор символов англ. UCS, universal character set и семейство кодировок англ. UTF, Unicode transformation format. Универсальный набор символов задаёт однозначное соответствие символов кодам — элементам кодового пространства, представляющим неотрицательные целые числа. Семейство кодировок определяет машинное представление последовательности кодов UCS. Коды в стандарте Unicode разделены на несколько областей. Область с кодами от U+0000 до U+007F содержит символы набора ASCII с соответствующими кодами. Далее расположены области знаков различных письменностей, знаки пунктуации и технические символы. Под символы кириллицы выделены области знаков с кодами от U+0400 до U+052F, от U+2DE0 до U+2DFF, от U+A640 до U+A69F. Часть кодов зарезервирована для использования в будущем. Впрочем, даже и этого на текущий момент более чем достаточно — в версии 6. Кодовое пространство разбито на плоскостей англ. Нулевая плоскость называется базовой, в ней расположены символы наиболее употребительных письменностей. Первая плоскость используется, в основном, для исторических письменностей, вторая — для для редко используемых иероглифов китайского письма, третья зарезервирована для архаичных китайских иероглифов. Плоскости и выделены для частного употребления. Для обозначения символов Unicode используется запись вида «U+xxxx» для кодов или «U+xxxxx» для кодов или «U+xxxxxx» для кодовгде xxx — шестнадцатеричные цифры. Например, символ «я» U+044F имеет код. Непротяжённые символы при отображении не занимают дополнительного места в строке. К примеру, к ним относятся знак ударения. Протяжённые и непротяжённые символы имеют собственные коды, но последние не могут встречаться самостоятельно. Протяжённые символы называются базовыми англ. Например символ «Й» U+0419 может быть представлен в виде базового символа «И» U+0418 и модифицирующего символа « ̆» U+0306. Unicode Transformation Format, UTF : UTF-8, UTF-16 UTF-16BE, UTF-16LE и UTF-32 UTF-32BE, UTF-32LE. Была разработана также форма представления UTF-7 для передачи по семибитным каналам, но из-за несовместимости с ASCII она не получила распространения и не включена в стандарт. Текст, состоящий только из символов с номером меньшепри записи в UTF-8 превращается в обычный текст ASCII. И наоборот, в тексте UTF-8 любой байт со значением меньше изображает символ ASCII с тем же кодом. Остальные символы Юникода изображаются последовательностями длиной от двух до шести байт на деле, только до четырех байт, поскольку в Юникоде нет символов с кодом большеи вводить их в будущем не планируетсяв которых первый байт всегда имеет вида остальные —. Символы UTF-8 получаются из Unicode cледующим образом: Unicode UTF-8 Представленные символы 0x00000000 — 0x0000007F 0xxxxxxx ASCII, в том числе английский алфавит, простейшие знаки препинания и арабские цифры 0x00000080 — 0x000007FF 110xxxxx 10xxxxxx кириллица, расширенная латиница, арабский алфавит, армянский алфавит, греческий алфавит, еврейский алфавит и коптский алфавит; сирийское письмо, тана, нко; Международный фонетический алфавит; некоторые знаки препинания 0x00000800 — 0x0000FFFF 1110xxxx 10xxxxxx 10xxxxxx все другие современные формы письменности, в том числе грузинский алфавит, индийское, китайское, корейское и японское письмо; сложные знаки препинания; математические и другие специальные символы 0x00010000 — 0x001FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx музыкальные символы, редкие китайские иероглифы, вымершие формы письменности 111111xx служебные символы c, d, e, f Несмотря на то, что UTF-8 позволяет указать один и тот же символ несколькими способами, только наиболее короткий из них правильный. Остальные формы, называемые overlong sequence, отвергаются по соображениям безопасности. Если размер символа в кодировке в UTF-8 байт то есть от до : 2. Данная кодировка позволяет записывать символы Юникода в диапазонах U+0000. U+10FFFF общим количествомпричем -байтные символы представляются как есть, а более длинные — с помощью суррогатных пар англ. В UTF-16 символы кодируются двухбайтовыми словами с использованием всех возможных диапазонов значений от. При этом можно кодировать символы Unicode в дипазонах. Исключенный отсюда диапазон используется как раз для кодирования так называемых суррогатных пар — символов, которые кодируются двумя -битными словами. Символы Unicode до включительно исключая диапазон для суррогатов записываются как есть -битным словом. Символы же в диапазоне больше бит уже кодируются парой -битных слов. Для этого их код арифметически сдвигается до нуля из него вычитается минимальное число. В результате получится значение от нуля докоторое занимает до бит. Старшие бит этого значения идут в лидирующее первое слово, а младшие бит — в последующее второе. При этом в обоих словах старшие бит используются для обозначения суррогата. Биты с по имеют значенияа -й бит содержит у лидирующего слова и — у последующего. В связи с этим можно легко определить к чему относится каждое слово. Который из двух идёт впереди, старший или младший, зависит от порядка байт. Подробнее об этом будет сказано ниже. Остальные кодировки, UTF-8 и UTF-16, используют для представления символов переменное число байт. Символ UTF-32 является прямым представлением его кодовой позиции англ. Главное преимущество UTF-32 перед кодировками переменной длины заключается в том, что символы Юникод непосредственно индексируемы. Получение -ой кодовой позиции является операцией, занимающей одинаковое время. Напротив, коды с переменной длиной требует последовательного доступа к -ой кодовой позиции. Это делает замену символов в строках UTF-32 простой, для этого используется целое число в качестве индекса, как обычно делается для строк ASCII. Главный недостаток UTF-32 — это неэффективное использование пространства, так как для хранения символа используется четыре байта. Символы, лежащие за пределами нулевой базовой плоскости кодового пространства редко используются в большинстве текстов. Поэтому удвоение, в сравнении с UTF-16, занимаемого строками в UTF-32 пространства не оправдано. Хотя использование неменяющегося числа байт на символ удобно, но не настолько, как. Операция усечения строк реализуется легче в сравнении с UTF-8 и UTF-16. Но это не делает более быстрым нахождение конкретного смещения в строке, так как смещение может вычисляться и для кодировок фиксированного размера. Это не облегчает вычисление отображаемой ширины строки, за исключением ограниченного числа случаев, так как даже символ «фиксированной ширины» может быть получен комбинированием обычного символа с модифицирующим, который не имеет ширины. Например, буква «й» может быть получена из буквы «и» и диакритического знака «крючок над буквой». Сочетание таких знаков означает, что текстовые редакторы не могут рассматривать -битный код как единицу редактирования. Редакторы, которые ограничиваются работой с языками с письмом слева направо и составными символами англ. Precomposed characterмогут использовать символы фиксированного размера. Но такие редакторы вряд ли поддержат символы, лежащие за пределами нулевой базовой плоскости кодового пространства и вряд ли смогут работать одинаково хорошо с символами UTF-16. В том случае, если число не может быть представлено одним байтом, имеет значение в каком порядке байты записываются в памяти компьютера или передаются по линиям связи. Часто выбор порядка записи байт произволен и определяется только соглашениями. В общем случае, для представления числабольшего здесь — максимальное целое число, записываемое одним байтомприходится использовать несколько байт. При этом число записывается в позиционной системе счисления по основанию : Набор целых чиселкаждое из которых лежит в интервале от доявляется последовательностью байт, составляющих. При этом называется младшим байтом, а — старшим байтом числа. Поэтому, порядок байт от старшего к младшему часто называют сетевым порядком байт англ. В этом же виде используя представление в десятичной системе счисления записываются числа индийско-арабскими цифрами в письменностях с порядком знаков слева направо латиница, кириллица. Для письменностей с обратным порядком арабская та же запись числа воспринимается как «от младшего к старшему». Порядок байт от старшего к младшему применяется во многих форматах файлов — например, PNG, FLV, EBML. Этот порядок записи принят в памяти персональных компьютеров с x86-процессорами, в связи с чем иногда его называют интеловский порядок байт по названию фирмы-создателя архитектуры x86. В противоположность порядку big-endian, соглашение little-endian поддерживают меньше кросс-платформенных протоколов и форматов данных; существенные исключения: USB, конфигурация PCI, таблица разделов GUID, рекомендации FidoNet. Обычно порядок байт выбирается программно во время инициализации операционной системы, но может быть выбран и аппаратно перемычками на материнской плате. В этом случае правильнее говорить о порядке байт операционной системы. Переключаемый порядок байт иногда называют англ. Число представляется последовательностью машинных слов, которые записываются в формате, естественном для данной архитектуры, но сами слова следуют в обратном порядке. Классический пример middle-endian — представление -байтных целых чисел на -битных процессорах семейства PDP-11 известен как PDP-endian. Для представления двухбайтных значений слов использовался порядок little-endian, но -хбайтное двойное слово записывалось от старшего слова к младшему. В процессорах VAX и ARM используется смешанное представление для длинных вещественных чисел. Так, если в ячейке памяти содержится числото прочитав его как int16 два байта мы получим числопрочитав один байт — число. Однако, это же может считаться и недостатком, потому что провоцирует ошибки потери данных. Обратно, считается что у little-endian, по сравнению с big-endian есть «неочевидность» значения байт памяти при отладке последовательность байт A1, B2, C3, D4 на самом деле значитдля big-endian эта последовательность A1, B2, C3, D4 читалась бы «естественным» для арабской записи чисел образом:. Наименее удобным в работе считается middle-endian формат записи; он сохранился только на старых платформах. Для записи длинных чисел чисел, длина которых существенно превышает разрядность машины обычно предпочтительнее порядок слов в числе little-endian поскольку арифметические операции над длинными числами производятся от младших разрядов к старшим. Порядок байт в слове — обычный для данной архитектуры. Это позволяет различать UTF-16LE и UTF-16BE, поскольку символа U+FFFE не существует. Представление BOM в кодировках Кодирование Представление Шестнадцатеричное UTF-8 EF BB BF UTF-16 BE FE FF UTF-16 LE FF FE UTF-32 BE 00 00 FE FF UTF-32 LE FF FE 00 00 В кодировке UTF-8, наличие BOM не является существенным, поскольку, нет альтернативной последовательности байт. Когда BOM используется на страницах или редакторах для контента закодированного в UTF-8, иногда он может представить пробелы или короткие последовательности символов, имеющие странный вид такие как . Именно поэтому, при наличии выбора, для совместимости, как правило, лучше упустить BOM в UTF-8 контенте. Однако BOM могут еще встречаться в тексте закодированном в UTF-8, как побочный продукт перекодирования или потому, что он был добавлен редактором. В этом случае BOM часто называют подписью UTF-8. Когда символ закодирован в UTF-16, его или байта можно упорядочить двумя разными способами little-endian или big-endian. Изображение справа показывает. Byte order mark указывает, какой порядок используется, так что приложения могут немедленно расшифровать контент. UTF-16 контент должен всегда начинатся с BOM. BOM также используется для текста обозначенного как UTF-32. Аналогично UTF-16 существует два варианта четырёхбайтной кодировки — UTF-32BE и UTF-32LE. Точно так же одним символом но отличающимся от «a» латинского считаются русское «а» и сербское «а». Такой принцип кодирования не универсален; по-видимому, решения «на все случаи жизни» вообще не может существовать. Например, английские буквы,пробел, знаки препинания и пр.




Владимир Кузнецов