Есть ли в Java методы для получения различных меток порядка следования байтов?
Я ищу вспомогательный метод или константу в Java, которая вернет мне байты, которые соответствуют метке порядка следования байтов для кодировки, но, похоже, я не могу ее найти. Есть один? Я действительно хотел бы сделать что-то вроде:
byte[] bom = Charset.forName( CharEncoding.UTF8 ).getByteOrderMark();
куда CharEncoding
исходит от Apache Commons.
5 ответов
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, если честно.