Есть ли в Java методы для получения различных меток порядка следования байтов? - PullRequest
4 голосов
/ 03 апреля 2009

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

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

Где CharEncoding происходит от Apache Commons.

Ответы [ 5 ]

3 голосов
/ 13 сентября 2012

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

3 голосов
/ 22 апреля 2009

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

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

1 голос
/ 03 апреля 2009

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

1 голос
/ 03 апреля 2009

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

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

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

1 голос
/ 03 апреля 2009

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

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

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

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

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

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

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

...