55
правок
Изменения
Нет описания правки
Также возможны коды длиной в 5 и 6 байт, но на практике они не используются. Это связано с тем, что в стандарт Unicode не входят символы с кодом выше <code>0x10ffff</code>.
==BOM==
'''Byte Order Mark (BOM)''' - Unicode символ, используемый для индикации порядка байтов (порядка байт) текстового файла. Его кодовый символ U+FEFF. По спецификации его использование не является обязательным, однако если BOM используется, то он должен быть установлен вначале текстового файла. Помимо своего конкретного использования в качестве указателя порядка байтов, символ может также указать какой кодировкой Unicode закодирован текст.
Кодировка Unicode может использовать 16-битные или 32-разрядных числа и приложение должно знать как дальше с ним поступать. Поэтому потребность в BOM возникает при обмене документами.
== Использование ==
В потоке данных UTF-16 старший байт может записываться либо перед младшим (англ. UTF-16 big-endian), либо после младшего (англ. UTF-16 little-endian). Аналогично существует два варианта четырёхбайтной кодировки — UTF-32BE и UTF-32LE.
Для определения формата представления Юникода в текстовом файле используется приём, по которому в начале текста записывается символ U+FEFF (неразрывный пробел с нулевой шириной), также именуемый меткой порядка байтов (англ. byte order mark, BOM). Этот способ позволяет различать UTF-16LE и UTF-16BE, поскольку символа U+FFFE не существует. Также он иногда применяется для обозначения формата UTF-8, хотя к этому формату и неприменимо понятие порядка байтов.
== Представление кодировки Byte order marks ==
{| class="wikitable"
|-
! Кодирование
! Представление (Шестнадцатеричная)
! Представление (Десятичная)
! Представление (ISO-8859-1)
|-
| UTF-8
| <code>EF BB BF</code>
| <code>239 187 191</code>
| <code></code>
|-
| UTF-16 ([[Big Endian|BE]])
| <code>FE FF</code>
| <code>254 255</code>
| <code>þÿ</code>
|-
| UTF-16 ([[Little Endian|LE]])
| <code>FF FE</code>
| <code>255 254</code>
| <code>ÿþ</code>
|-
| UTF-32 (BE)
| <code>00 00 FE FF</code>
| <code>0 0 254 255</code>
| <code>□□þÿ</code> (□ ASCII символ нуль)
|-
| UTF-32 (LE)
| <code>FF FE 00 00</code>
| <code>255 254 0 0</code>
| <code>ÿþ□□</code> (□ ASCII символ нуль)
|-
| UTF-7
| <code>2B 2F 76 38<br>2B 2F 76 39<br>2B 2F 76 2B<br>2B 2F 76 2F</code><ref group="t">In UTF-7, the fourth byte of the BOM, before encoding as [[base64]], is <code>001111xx</code> in binary, and <code>xx</code> depends on the next character (the first character after the BOM). Hence, technically, the fourth byte is not purely a part of the BOM, but also contains information about the next (non-BOM) character. For <code>xx=00</code>, <code>01</code>, <code>10</code>, <code>11</code>, this byte is, respectively, <code>38</code>, <code>39</code>, <code>2B</code>, or <code>2F</code> when encoded as base64. If no following character is encoded, <code>38</code> is used for the fourth byte and the following byte is <code>2D</code>.</ref>
| <code>43 47 118 56<br>43 47 118 57<br>43 47 118 43<br>43 47 118 47</code>
| <code>+/v8<br>+/v9<br>+/v+<br>+/v/</code>
|-
| UTF-1<ref name=b group=t/>
| <code>F7 64 4C</code>
| <code>247 100 76</code>
| <code>÷dL</code>
|-
| UTF-EBCDIC<ref name=b group=t/>
| <code>DD 73 66 73</code>
| <code>221 115 102 115</code>
| <code>Ýsfs</code>
|-
| Standard Compression Scheme for Unicode|SCSU<ref name=b group=t/>
| <code>0E FE FF</code>{{#tag:ref|SCSU allows other encodings of U+FEFF, the shown form is the signature recommended in UTR #6.</ref>|group=t}}
| <code>14 254 255</code>
| <code>□þÿ</code> (□ ASCII "shift out" символ)
|-
| BOCU-1<ref name=b group=t/>
| <code>FB EE 28
| <code>251 238 40</code>
| <code>ûî</code>
|-
| GB-18030<ref name=b group=t/>
| <code>84 31 95 33</code>
| <code>132 49 149 51</code>
| <code>□1■3</code> (□ и ■ несопоставленные ISO-8859-1 символы)
|}
К сожалению, этот способ не позволяет надёжно различать UTF-16LE и UTF-32LE, поскольку символ U+0000 допускается Юникодом (хотя реальные тексты редко начинаются с него).
== Ссылки ==
* [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: Юникод]
[[Категория: Дискретная математика и алгоритмы]]
[[Категория: Представление информации]]