Назад, к оглавлению
Специальный символ «BOM»

По косвенным признакам определить, в какой кодовой таблице представлен текст, конечно, можно, но в некоторых случаях, особенно с UTF, сделать это однозначно правильно невозможно, отчасти и потому, что при одних и тех же кодировках в разных системах в многобайтовых записях используется разный порядок байт, поэтому, чтобы упростить жизнь пользователям (и программам), был придуман специальный символ «BOM», который можно хранить или передавать вместе с текстом. Аббревиатура BOM расшифровывается как Byte Order Mark (отметка о порядке байтов) – Unicode-символ, используемый для индикации порядка байтов текстового файла. По спецификации его использование не является обязательным, однако если BOM используется, то он должен быть установлен в начале текстового файла. Помимо своего конкретного использования в качестве указателя порядка байтов, символ может также указать, какой кодировкой Unicode закодирован текст.
КодировкаBOM-символ
UTF-8EF 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

Согласно спецификации Unicode, символ «U+FEFF» (для случая UTF-16 (BE)) в середине потока данных должен интерпретироваться как «нулевой ширины неразрывный пробел» (по существу, отсутствующий символ). Однако Unicode 3.2 настоятельно рекомендует использовать в этом качестве символ «U+2060» («Word Joiner»), а «U+FEFF» использовать только как «BOM».

В большинстве случаев использование символа «BOM» для пользователя прозрачно, например тот же «блокнот» (notepad.exe для ОС Windows), открывая файл с «BOM»-символом вначале текста, никак его не покажет. Узнать о его наличии можно или косвенно – например, файл будет на 2 байта больше, или используя hex-режим просмотра файлов.

Замечание. Данный вопрос наглядно демонстрирует, что неграмотно составленные тесты не могут дать объективную оценку знаниям экзаменуемого. Допустим, вам попался вопрос: сколько будет занимать текстовый файл, содержащий слово «мама», написанное кириллицей? Как вы догадываетесь, правильным ответом может быть и 4 байта, и 8 байт, и 10 байт, и 4096 байт и др. Как отвечать? Какие кодировки подразумевались? Знал ли разработчик теста о том, что могут использоваться один или несколько символов «BOM»? Имелся ли размер используемого места файлом на диске или чистый размер содержимого?