Кодировка | BOM-символ |
UTF-8 | EF 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»? Имелся ли размер используемого места файлом на диске или чистый размер содержимого?