Есть ли в Java методы для получения различных меток порядка следования байтов?

Я ищу вспомогательный метод или константу в Java, которая вернет мне байты, которые соответствуют метке порядка следования байтов для кодировки, но, похоже, я не могу ее найти. Есть один? Я действительно хотел бы сделать что-то вроде:

byte[] bom = Charset.forName( CharEncoding.UTF8 ).getByteOrderMark();

куда CharEncoding исходит от Apache Commons.

5 ответов

Java не распознает метки порядка байтов для UTF-8. См. Ошибки 4508058 и 6378911.

Суть в том, что добавлена ​​поддержка, нарушена обратная совместимость и откатан. Вам придется самостоятельно распознавать спецификацию в UTF-8.

Apache Commons IO содержит то, что вы ищете, смотрите org.apache.commons.io.ByteOrderMark,

Вы можете создать спецификацию следующим образом:

byte[] utf8_bom = "\uFEFF".getBytes("UTF-8");
byte[] utf16le_bom = "\uFEFF".getBytes("UnicodeLittleUnmarked");

Если вы хотите создать спецификации для других кодировок, используя этот метод, убедитесь, что вы используете версию кодировки, которая автоматически не вставляет спецификацию, или это будет повторяться. Этот метод применим только к кодировкам Unicode и не даст значимых результатов для других (например, Windows-1252).

Стоит отметить, что многие кодировки не используют метки порядка байтов. например, пустая строка в UTF-8 - это просто пустой байт []. Хотя для UTF-8 указана спецификация, она редко используется в Java и не всегда поддерживается.

Насколько я вижу, в JDK нет ничего, кроме проектов Apache.

Eclipse EMF имеет Enum, который обеспечивает поддержку:

org.eclipse.emf.ecore.resource.ContentHandler.ByteOrderMark

Я не уверен, что это вам поможет?

Здесь есть дополнительная информация о различных спецификациях для каждого типа кодирования, вы можете написать простой вспомогательный класс или перечисление для этого...

http://mindprod.com/jgloss/bom.html

Надеюсь, это поможет. Я удивлен, что это не в I /O Commons, если честно.

Другие вопросы по тегам