Где в файле можно использовать маркер последовательности байтов bom

Обновлено: 03.07.2024

Знак порядка байтов (BOM) – это символ Юникода в кодовой точке U+FEFF ("пробел без разрыва нулевой ширины"), когда этот символ используется для обозначения порядка следования байтов строки закодированных символов UCS/Unicode. в UTF-16 или UTF-32. Он обычно используется в качестве маркера, чтобы указать, что текст закодирован в UTF-8 , UTF-16 или UTF-32 .

Использование

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

В UTF-16 спецификация ( U+FEFF ) помещается в качестве первого символа файла или потока символов, чтобы указать порядок следования байтов (порядок байтов) всех 16-битных единиц кода файла или потока.< /p>

* Если 16-разрядные блоки представлены в порядке байтов с обратным порядком байтов, этот символ спецификации появится в последовательности байтов как 0xFE, за которым следует 0xFF (где "0x" означает шестнадцатеричный формат);
* если 16-битные блоки используют обратный порядок байтов, последовательность байтов будет иметь 0xFF, за которым следует 0xFE .

Значение Unicode U+FFFE гарантированно никогда не будет назначено как символ Unicode; это означает, что в контексте Unicode шаблон байтов 0xFF , 0xFE может интерпретироваться только как символ U+FEFF, выраженный в порядке байтов с прямым порядком байтов (поскольку это не может быть символ U+FFFE, выраженный в порядке байтов с прямым порядком байтов).

Хотя спецификацию можно использовать с UTF-32 , эта кодировка редко используется для передачи. В остальном применяются те же правила, что и для UTF-16. Для кодировок, зарегистрированных в IANA, UTF-16BE, UTF-16LE, UTF-32BE и UTF-32LE нельзя использовать «знак порядка байтов», начальный код U+FEFF следует интерпретировать как (устаревшее) «нулевую ширину нет». -break space", потому что имена этих кодировок уже определяют порядок байтов. Для зарегистрированных кодировок UTF-16 и UTF-32 начальный символ U+FEFF указывает порядок байтов.

Представление меток порядка байтов по кодировке

См. также

Ссылки

Внешние ссылки

Фонд Викимедиа . 2010 .

Посмотрите в других словарях:

Знак порядка байтов — (BOM) символ Unicode, использование для индикации порядка байтов текстового файла. Его кодовый символ U+FEFF. По определению его использование не является обязательным, однако если BOM используется, то он должен быть установлен в начале… … Википедия

Знак порядка байтов — Als Знак порядка байтов (BOM, dt. «Bytereihenfolge Markierung») wird das Unicode Zeichen U+FEFF (englisch нулевая ширина, неразрывный пробел) am Anfang eines Datenstroms bezeichnet, wo es als Kennung zur Definition der Byte Reihenfolge und… … Немецкая Википедия

Знак порядка байтов — Marque d ordre des octets Pour les article homonyms, voir BOM. Unicode Основные характеристики UCS (ISO/CEI 10646) ISO 646, ASCII ISO 8859 1 WGL4 UniHan Эквиваленты нормализуются NFC … Wikipédia en Français

метка порядка байтов — baitų eiliškumo ženklas statusas T sritis informatika apibrėžtis ↑Ženklas, nurodantis ↑baitų eiliškumą ↑unikodo tekste. Кодас U+FFFE. Rašomas unikodo teksto failo pradžioje. Šio ženklo baitus procesorius skaito jame nustatyta tvarka. Jeigu jis… … Enciklopedinis kompiuterijos žodynas

Byte-Order — Die Byte Reihenfolge (англ.: Byte Order oder Endianness) bezeichnet die Speicherorganisation für einfache Zahlenwerte, in erster Lineie die Ablage von ganzzahligen Werten (Integer) im Arbeitsspeicher. Eine Festlegung des zu verwendenden… … Немецкая Википедия

Byte Order — Die Byte Reihenfolge (англ.: Byte Order oder Endianness) bezeichnet die Speicherorganisation für einfache Zahlenwerte, in erster Line die Ablage von ganzzahligen Werten (Integer) im Arbeitsspeicher. Eine Festlegung des zu verwendenden… … Немецкая Википедия

Порядок байтов — Die Byte Reihenfolge (англ.: Byte Order oder Endianness) bezeichnet die Speicherorganisation für einfache Zahlenwerte, in erster Linie die Ablage von ganzzahligen Werten (Integer) im Arbeitsspeicher. Eine Festlegung des zu verwendenden… … Немецкая Википедия

Сетевой порядок байтов — Die Byte Reihenfolge (англ.: Byte Order oder Endianness) не имеет значения Speicherorganisation für einfache Zahlenwerte, в erster Lineie die Ablage von ganzzahligen Werten (Integer) im Arbeitsspeicher. Eine Festlegung des zu verwendenden… … Немецкая Википедия

Орден оккультной руки — Орден оккультной руки — это причудливое тайное общество американских журналистов, которым удалось подсунуть бессмысленную и предательскую фразу «Как будто оккультная рука…» в печати как своего рода игра и внутренняя шутка.Содержание 1 История 2… … Википедия

Отметка слева направо — отметка слева направо (abbr|LRM|отметка слева направо) — это непечатаемый символ, используемый при компьютеризированном наборе двунаправленного текста, содержащего смешанные шрифты слева направо (например, английский и Русский) и шрифты справа налево (такие как… … Википедия

Что такое спецификация в XML-документе ANSI и следует ли ее удалить? Должен ли документ XML быть в UTF-8 вместо этого? Может ли кто-нибудь сказать мне метод Java, который обнаружит спецификацию? Спецификация состоит из символов EF BB BF .


4 ответа 4

Для XML-файла ANSI его следует удалить. Если вы хотите использовать UTF-8, вам это не нужно. Требуется только для UTF-16 и UTF-32.

Знак порядка байтов (или BOM) — это специальный маркер, добавляемый в самое начало файла Unicode, закодированного в UTF-8, UTF-16 или UTF-32. Он используется, чтобы указать, использует ли файл порядок следования байтов с прямым или прямым порядком байтов. Спецификация является обязательной для UTF-16 и UTF-32, но необязательной для UTF-8.

Относительно вопроса о том, как определить это в Java.

По сути, просто прочитайте первые несколько байтов самостоятельно, а затем определите, не нашли ли вы спецификацию.

спасибо за отличный ответ. так как я ожидаю, что файл будет UTF-8, я просто игнорирую первые 3 символа, используя что-то вроде: String file1sub = getXMLContents(file1).substring(3);

Знак порядка следования байтов, скорее всего, представляет собой одну из следующих последовательностей байтов:

Это различные кодированные формы кодовой точки Unicode U+FEFF. Это может быть выражено как символьный литерал Java с использованием '\uFEFF' (значения символов Java неявно UTF-16). Поскольку U + FEFF отсутствует в большинстве кодировок, эта кодовая точка спецификации не может быть закодирована ими. (Подробнее о кодировании спецификации с помощью Java здесь.)

Что касается спецификаций и XML, они необязательны (см. также часто задаваемые вопросы о спецификациях Unicode). Обнаружение кодировки в XML относительно просто, если кодировка указана в объявлении. Всегда следите за тем, чтобы объявление XML ( ) соответствовало кодировке, используемой для написания документа. Если вы строго относитесь к этому, синтаксические анализаторы должны правильно интерпретировать ваши документы. (Спецификация XML по обнаружению кодировки.)

Всегда ставьте перед текстовым файлом Unicode знак порядка следования байтов, который информирует приложение, получающее файл, о том, что файл имеет порядок следования байтов. Доступные метки порядка следования байтов перечислены в следующей таблице. Поскольку обычный текст Unicode представляет собой последовательность 16-битных кодовых значений, он чувствителен к порядку байтов, используемому при записи текста.

Знак порядка байтов не является управляющим символом, который выбирает порядок байтов текста.

Знак порядка следования байтов Описание
EF BB BF UTF-8
FF FE UTF-16, прямой порядок байтов
FE FF UTF-16, прямой порядок байтов
FF FE 00 00 UTF-32, прямой порядок байтов
00 00 FE FF UTF-32, обратный порядок байтов

Microsoft использует кодировку UTF-16, обратный порядок байтов.

В идеале весь текст Unicode следует только одному набору правил упорядочения байтов. Однако это невозможно, поскольку микропроцессоры различаются расположением младшего значащего байта. Процессоры Intel и MIPS размещают наименее значащий байт первым, тогда как процессоры Motorola (и все файлы Unicode с обратным байтом) располагают его последним. Имея только один набор правил упорядочения байтов, пользователи одного типа микропроцессора вынуждены менять порядок байтов каждый раз, когда текстовый файл читается или записывается в него, даже если файл никогда не переносится в другую операционную систему на основе другой микропроцессор.

Предпочтительнее указывать порядок байтов в заголовке файла, но текстовые файлы не имеют заголовков. Поэтому Unicode определил символ (U+FEFF) и несимвол (U+FFFE) как метки порядка байтов. Они являются зеркальными байтовыми изображениями друг друга.

Поскольку последовательность U+FEFF чрезвычайно редко встречается в начале обычного текстового файла, отличного от Unicode, она может служить неявным маркером или подписью для идентификации файла как файла Unicode. Приложения, которые считывают текстовые файлы как в формате Unicode, так и в текстовых файлах, отличных от Unicode, должны использовать наличие этой последовательности как индикатор того, что файл, скорее всего, является файлом Unicode. Сравните этот метод с использованием маркера EOF MS-DOS для завершения текстовых файлов.

Когда приложение находит U+FEFF в начале текстового файла, оно обычно обрабатывает файл как файл Unicode, хотя может выполнять дополнительные эвристические проверки для проверки. Такая проверка может быть такой же простой, как тестирование, чтобы выяснить, намного ли вариация младших байтов выше, чем вариация байтов старшего порядка. Например, если текст ASCII преобразуется в текст Unicode, каждый второй байт равен 0.Кроме того, проверка символов перевода строки и возврата каретки (U+000A и U+000D), а также четного или нечетного размера файла может дать надежный индикатор характера файла.

Когда приложение находит U+FFFE в начале текстового файла, оно интерпретирует это как означающее, что файл является файлом Unicode с обратным байтом. Приложение может либо поменять порядок байтов, либо предупредить пользователя о возникновении ошибки.

Поскольку знак порядка следования байтов Unicode не найден ни на одной кодовой странице, он исчезает при преобразовании данных в ANSI. В отличие от других символов Unicode, он не заменяется символом по умолчанию при преобразовании. Если в середине файла обнаружена метка порядка следования байтов, она не интерпретируется как символ Юникода и не влияет на вывод текста.

Значение Unicode U+FFFF недопустимо в текстовых файлах и не может передаваться между приложениями. Он зарезервирован для частного использования приложения.

Общие вопросы, касающиеся UTF или форм кодировки

Часто задаваемые вопросы по UTF-8

Часто задаваемые вопросы по UTF-16

Часто задаваемые вопросы по UTF-32

Часто задаваемые вопросы о метке порядка байтов (BOM)

Общие вопросы, касающиеся UTF или формы кодировки

< th>Самая большая кодовая точка
Имя UTF-8 UTF-16 UTF-16BE UTF-16LE UTF-32 UTF-32BE UTF-32LE
Наименьшая кодовая точка 0000 0000 0000 0000< /td> 0000 0000 0000
10FFFF 10FFFF 10FFFF 10FFFF 10FFFF 10FFFF 10FFFF
Размер блока кода 8 бит 16 бит 16 бит 16 бит 32 бита 32 бита 32 бита
Порядок байтов Н/Д обратный порядок байтов li ttle-endian big-endian little-endian
Наименьшее количество байтов на символ 1 2 2 2 4 4 4
Большинство байтов на символ 4 4 4< /td> 4 4 4 4

Часто задаваемые вопросы по UTF-8

Часто задаваемые вопросы по UTF-16

Вопрос. Что такое UTF-16?

О. В UTF-16 используется одна 16-битная кодовая единица для кодирования наиболее распространенных 63 000 символов и пара 16-битных кодовых единиц, называемых суррогаты, чтобы кодировать 1 миллион менее часто используемых символов в Unicode.

Первоначально Unicode был разработан как чистая 16-битная кодировка, предназначенная для представления всех современных сценариев. (Древние сценарии должны были быть представлены символами для частного использования.) Со временем, особенно после добавления более 14 500 составных символов для совместимости с устаревшими наборами, стало ясно, что 16-битных недостаточно для пользовательского сообщества. Из этого возник UTF-16. [AF]

В: Что такое суррогаты?

О: Суррогаты – это кодовые точки из двух специальных диапазонов значений Unicode, зарезервированные для использования в качестве начальных и конечных значений парного кода. единицы в UTF-16. Ведущие, также называемые старшими, суррогаты — от D80016 до DBFF16, а замыкающие, или нижние, суррогаты — от DC0016 до DFFF< под>16. Их называют суррогатными, так как они не представляют символы напрямую, а только как пару.

В: Каков алгоритм преобразования из UTF-16 в коды символов?

О: Стандарт Unicode раньше содержал короткий алгоритм, теперь есть только таблица распределения битов. Вот три коротких фрагмента кода, которые переводят информацию из таблицы распределения битов в код C, который будет преобразовываться в UTF-16 и обратно.

Используя следующие определения типов

первый фрагмент вычисляет старший (или ведущий) суррогат по коду символа C.

где X, U и W соответствуют меткам, используемым в таблице 3-5 Распределение битов UTF-16. Следующий фрагмент делает то же самое для младшего суррогата.

Наконец, обратная сторона, где hi и lo — старший и младший заместители, а C — результирующий символ

Читайте также: