48
правок
Изменения
Статья была дополнена и исправлена
В вычислительных машинах символы не могут храниться иначе, как в виде последовательностей битов (как и числа). Для передачи символа и его корректного отображения ему должна соответствовать уникальная последовательность нулей и единиц. Для этого были разработаны таблицы кодировок.
Количество символов, которые можно задать последовательностью битов длины ''<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===
Часть кодов зарезервирована для использования в будущем.
====Кодовое пространство====
Кодовое пространство разбито на 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 Transformation Format, UTF): UTF-8, UTF-16 (UTF-16BE, UTF-16LE) и UTF-32 (UTF-32BE, UTF-32LE). Была разработана также форма представления UTF-7 для передачи по семибитным каналам, но из-за несовместимости с ASCII она не получила распространения и не включена в стандарт.
<br>
====UTF-8====
Символы 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.
<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: {{---}} Юникод]
[[Категория: Дискретная математика и алгоритмы]]
[[Категория: Представление информации]]