Изменения

Перейти к: навигация, поиск

Представление символов, таблицы кодировок

5194 байта добавлено, 16:17, 23 ноября 2014
Статья была дополнена и исправлена
В вычислительных машинах символы не могут храниться иначе, как в виде последовательностей битов (как и числа). Для передачи символа и его корректного отображения ему должна соответствовать уникальная последовательность нулей и единиц. Для этого были разработаны таблицы кодировок.
Количество символов, которые можно задать последовательностью битов длины ''<tex>n''</tex>, задается простой формулой <tex>C(n) = 2^n</tex>. Таким образом, от нужного количества символов напрямую зависит количество используемой памяти.
== Таблицы кодировок ==
}}
'''7 бит:'''
* '''ASCII7''' - первая кодировка, пригодная для работы с текстом. Помимо маленьких букв английского алфавита и служебных символов, содержит большие буквы английского языка, цифры, знаки препинания и другие символы.
 <br>'''Кодировки стандарта ASCII (8 бит):'''
* '''ASCII''' - первая кодировка, в которой стало возможно использовать символы национальных алфавитов.
* '''КОИ8-R''' - первая русская кодировка. Символы кириллицы расположены не в алфавитном порядке. Их разместили в верхнюю половину таблицы так, чтобы позиции кириллических символов соответствовали их фонетическим аналогам в английском алфавите. Это значит, что даже при потере старшего бита каждого символа, например, при проходе через устаревший семибитный модем, текст остается "читаемым".
* '''CP866''' - русская кодировка, использовавшаяся на компьютерах IBM в системе DOS.
* '''Windows-1251''' - русская кодировка, использовавшаяся в русскоязычных версиях операционной системы Windows в начале 90-х годов. Кириллические символы идут в алфавитном порядке. Содержит все символы, встречающиеся в типографике обычного текста (кроме знака ударения).[http://ru.wikipedia.org/wiki/CP1251]
 
<br>
===Кодировки стандарта UNICODE===
Часть кодов зарезервирована для использования в будущем.
Юникод имеет несколько форм представления (англ. Unicode Transformation Format, UTF): UTF-8, UTF-16 (UTF-16BE, UTF-16LE) и UTF-32 (UTF-32BE, UTF-32LE). Была разработана также форма представления UTF-7 для передачи по семибитным каналам, но из-за несовместимости с ASCII она не получила распространения и не включена в стандарт.
====Кодовое пространство====
Кодовое пространство разбито на 17 плоскостей по 216 <tex>2^{16}</tex> (65536) символов. Нулевая плоскость называется базовой, в ней расположены символы наиболее употребительных письменностей. Первая плоскость используется, в основном, для исторических письменностей, вторая {{---}} для для редко используемых иероглифов китайского письма, третья зарезервирована для архаичных китайских иероглифов. Плоскости 15 и 16 выделены для частного употребления. Для обозначения символов Unicode используется запись вида «U+xxxx» (для кодов 0…FFFF) или «U+xxxxx» (для кодов 10000…FFFFF) или «U+xxxxxx» (для кодов 100000…10FFFF), где xxx — шестнадцатеричные цифры. Например, символ «я» (U+044F) имеет код <tex>044F_{16} = 1103_{10}</tex>.  ====Модифицирующие символы====[[Файл:Ji.png|thumb|right| 250px]]Графические символы в Юникоде делятся на протяжённые и непротяжённые. Непротяжённые символы при отображении не занимают места в строке. К примеру, к ним относятся знак ударения. Протяжённые и непротяжённые символы имеют собственные коды, но последние не могут встречаться самостоятельно. Протяжённые символы называются базовыми (англ. ''base characters''), а непротяженные {{---}} модифицирующими (англ. ''combining characters''). Например символ «Й» (U+0419) может быть представлен в виде базового символа «И» (U+0418) и модифицирующего символа « ̆» (U+0306).
Для обозначения символов Unicode используется запись вида «U+xxxx» (для кодов 0…FFFF) или «U+xxxxx» (для кодов 10000…FFFFF) или «U+xxxxxx» (для кодов 100000…10FFFF), где xxx — шестнадцатеричные цифры. Например, символ «я» (U+044F) имеет код 044F16 = 110310.
====Способы представления====
Юникод имеет несколько форм представления (англ. Unicode Transformation Format, UTF): UTF-8, UTF-16 (UTF-16BE, UTF-16LE) и UTF-32 (UTF-32BE, UTF-32LE). Была разработана также форма представления UTF-7 для передачи по семибитным каналам, но из-за несовместимости с ASCII она не получила распространения и не включена в стандарт.
 
<br>
====UTF-8====
* '''UTF8''' UTF-8 {{---}} представление Юникода, обеспечивающее наилучшую совместимость со старыми системами, использовавшими 8- самая распространенная на данный момент кодировка битные символы. Текст, состоящий только из семейства UNICODEсимволов с номером меньше 128, при записи в UTF-8 превращается в обычный текст ASCII. [http:И наоборот, в тексте UTF-8 любой байт со значением меньше 128 изображает символ ASCII с тем же кодом. Остальные символы Юникода изображаются последовательностями длиной от 2 до 6 байт (на деле, только до 4 байт, поскольку в Юникоде нет символов с кодом больше <code>10FFFF</code>, и вводить их в будущем не планируется), в которых первый байт всегда имеет вид <code>11xxxxxx</rucode>, а остальные — <code>10xxxxxx</code>.wikipedia.org/wiki/В UTF-8]не используются суррогатные пары, 4-x байтов достаточно для записи любого символа юникода.
Символы UTF-8 получаются из Unicode cледующим образом:<br>
{|class="wikitable"
!Unicode||UTF-8||Представленные символы
|||<code>111111xx</code>||служебные символы c, d, e, f
|}
Несмотря на то, что UTF-8 позволяет указать один и тот же символ несколькими способами, только наиболее короткий из них правильный. Остальные формы, называемые overlong sequence, отвергаются по соображениям безопасности.
 
<br>
====UTF-16====
UTF-16 {{---}} один из способов кодирования символов (англ. ''code point'') из Unicode в виде последовательности 16-битных слов (англ. ''code unit''). Данная кодировка позволяет записывать символы Юникода в диапазонах U+0000..U+D7FF и U+E000..U+10FFFF (общим количеством 1 112 064), причем 4-байтные символы представляются как есть, а более длинные {{---}} с помощью суррогатных пар (англ. ''surrogate pair''), для которых и вырезан диапазон 0xD800–0xDFFF.
Также возможны коды длиной В UTF-16 символы кодируются двухбайтовыми словами с использованием всех возможных диапазонов значений (от 0 до <tex>FFFF_{16}</tex>). При этом можно кодировать символы Unicode в 5 дипазонах <tex>0000_{16}..D7FF_{16}</tex> и 6 байт<tex>E000_{16}..10FFFF_{16}</tex>. Исключенный отсюда диапазон <tex>D800_{16}..DFFF_{16}</tex> используется как раз для кодирования так называемых суррогатных пар — символов, которые кодируются двумя 16-битными словами. Символы Unicode до <tex>FFFF_{16}</tex> включительно (исключая диапазон для суррогатов) записываются как есть 16-битным словом. Символы же в диапазоне <tex>10000_{16}..10FFFF_{16}</tex> (больше 16 бит) уже кодируются парой 16-битных слов. Для этого их код арифметически сдвигается до нуля (из него вычитается минимальное число <tex>10000_{16}</tex>). В результате получится значение от нуля до <tex>FFFF_{16}</tex>, но на практике они не используютсякоторое занимает до 20 бит. Это связано с темСтаршие 10 бит этого значения идут в лидирующее (первое) слово, что а младшие 10 бит — в стандарт Unicode не входят символы последующее (второе). При этом в обоих словах старшие 6 бит используются для обозначения суррогата. Биты с кодом выше 11 по 15 имеют значения <codetex>0x10ffff11011_2</codetex>, а 10-й бит содержит 0 у лидирующего слова и 1 — у последующего. В связи с этим можно легко определить к чему относится каждое слово.
<br>====BOMПорядок байтов===='''Byte Order Mark (BOM)(''метка порядка байтов'')''' - Unicode символ, используемый для индикации порядка байтов Для определения формата представления Юникода в начало текстового файла. Его кодовый записывается сигнатура — символ U+FEFF (ZERO WIDTH NON-BREAKING SPACE)''неразрывный пробел с нулевой шириной''), также именуемый маркером последовательности байтов (англ. По спецификации его использование не является обязательным, однако если ''byte order mark (BOM используется, то он должен быть установлен вначале текстового файла)''). Помимо своего конкретного использования в качестве указателя порядка байтовЭто позволяет различать UTF-16LE и UTF-16BE, символ может также указать какой кодировкой Unicode закодирован текстпоскольку символа U+FFFE не существует.
[[Файл:Bom.png|thumb|right| 400px]]
 
 
{| class="wikitable"
|+'''Представление BOM в кодировках'''
В кодировке UTF-8, наличие BOM не является существенным, поскольку, нет альтернативной последовательности байтов. Когда BOM используется на страницах или редакторах для контента закодированного в UTF-8, иногда он может представить пробелы или короткие последовательности символов, имеющие странный вид (такие как ). Именно поэтому, при наличии выбора, для совместимости, как правило, лучше упустить BOM в UTF-8 контенте.Однако BOM могут еще встречаться в тексте закодированном в UTF-8, как побочный продукт перекодирования или потому, что он был добавлен редактором. В этом случае BOM часто называют подписью UTF-8.
Когда символ закодирован в UTF-16, его 2 или 4 байта можно упорядочить двумя разными способами (little-endian или big-endian). Изображение справа показывает это.Byte order mark указывает, какой порядок используется, так что приложения могут немедленно расшифровать контент. UTF-16 контент должен всегда начинатся с BOM.
BOM также используется для текста обозначенного как UTF-32. Аналогично UTF-16 существует два варианта четырёхбайтной кодировки — UTF-32BE и UTF-32LE.К сожалению, этот способ не позволяет надёжно различать UTF-16LE и UTF-32LE, поскольку символ U+0000 допускается Юникодом
==Примеры==
Если записать строку 'hello мир' в файл exampleBOM, а затем сделать его hex-дамп, то можно убедиться в том, что разные символы кодируются разным количеством байт. Например, английские буквы,пробел, знаки препинания и пр. кодируются одним байтом, а русские буквы - двумя
|}
== Ссылки ==
* [http://ru.wikipedia.org/wiki/ASCII Wikipedia: {{---}} таблица ASCII]* [http://ru.wikipedia.org/wiki/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4 Wikipedia: {{---}} стандарт UNICODE]* [http://ru.wikipedia.org/wiki/Byte_order_mark Wikipedia: {{---}} Byte order mark]* [http://ru.wikipedia.org/wiki/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4 Wikipedia: {{---}} Юникод]
[[Категория: Дискретная математика и алгоритмы]]
[[Категория: Представление информации]]
48
правок

Навигация