Byte order mark
Byte Order Mark (BOM) — Unicode-символ, используемый для индикации порядка байтов текстового файла. Его кодовый символ U+FEFF. По спецификации его использование не является обязательным, однако если BOM используется, то он должен быть установлен в начале текстового файла. Помимо своего конкретного использования в качестве указателя порядка байтов, символ может также указать какой кодировкой Unicode закодирован текст.
Кодировка Unicode может использовать 16-битные или 32-разрядных числа и приложение должно знать, как дальше с ним поступать. Поэтому потребность в BOM возникает при обмене документами.
Использование [править]
Согласно спецификации Unicode, символ U+FEFF в середине потока данных должен интерпретироваться как «нулевой ширины неразрывный пробел» (по существу, нулевой символ). Однако Unicode 3.2 настоятельно рекомендует использовать в этом качестве символ U+2060 «Word Joiner»[1], а U+FEFF использовать только как BOM.
Представление кодировки byte order marks [править]
| Кодировка | Представление (hex) | Представление (dec) | Представление (ISO-8859-1) |
|---|---|---|---|
| UTF-8[t 1] | EF BB BF |
239 187 191 |
 |
| UTF-16 (BE) | FE FF |
254 255 |
þÿ |
| UTF-16 (LE) | FF FE |
255 254 |
ÿþ |
| UTF-32 (BE) | 00 00 FE FF |
0 0 254 255 |
□□þÿ (□ is the ascii null character) |
| UTF-32 (LE) | FF FE 00 00 |
255 254 0 0 |
ÿþ□□ (□ is the ascii null character) |
| UTF-7[t 1] | 2B 2F 76 38[t 2] |
43 47 118 56 |
+/v8 |
| UTF-1[t 1] | F7 64 4C |
247 100 76 |
÷dL |
| UTF-EBCDIC[t 1] | DD 73 66 73 |
221 115 102 115 |
Ýsfs |
| SCSU[t 1] | 0E FE FF[t 3] |
14 254 255 |
□þÿ (□ is the ascii "shift out" character) |
| BOCU-1[t 1] | FB EE 28 |
251 238 40 |
ûî |
| GB-18030[t 1] | 84 31 95 33 |
132 49 149 51 |
□1■3 (□ and ■ are unmapped ISO-8859-1 characters) |
- ↑ 1 2 3 4 5 6 7 В этих кодировках последовательность не определяет именно порядок байтов, так как кодировка однобайтная, но эта последовательность может использоваться для определения способа кодировки.[2][3]
- ↑ В UTF-7 в связи с использованием base-64, четвёртый байт BOM является
001111xxв двоичном представлении, гдеxxзависит от следующего символа (первого после BOM). Поэтому четвёртый байт не является только частью BOM, но также содержит информацию о следующем (не BOM) символе. Дляxx=00,01,10,11, четвёртый байт будет, соответственно,38,39,2B, or2Fпри кодировке в base64. Если же следующий символ не кодируется base64, то используется38в качестве четвёртого байта, а следующий байт2D. - ↑ SCSU предусматривает и другие кодировки для U+FEFF, указанная последовательность является рекомендованной в UTR #6.[4]
Примечания [править]
- ↑ Unicode FAQ: UTF-8, UTF-16, UTF-32 & BOM
- ↑ FAQ - UTF-8, UTF-16, UTF-32 & BOM: Can a UTF-8 data stream contain the BOM character (in UTF-8 form)? If yes, then can I still assume the remaining UTF-8 bytes are in big-endian order?. Архивировано из первоисточника 1 сентября 2012. Проверено 4 января 2009.
- ↑ STD 63: UTF-8, a transformation of ISO 10646 Byte Order Mark (BOM)
- ↑ UTR #6: Signature Byte Sequence for SCSU