Java是否有获取各种字节顺序标记的方法?

我在Java中寻找一个实用程序方法或常量,它将返回与编码的相应字节顺序标记相对应的字节,但我似乎无法找到一个。 有吗? 我真的想做点什么:

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

CharEncoding来自Apache Commons。

Java无法识别UTF-8的字节顺序标记。 请参阅错误4508058和6378911 。

要点是添加了支持,打破了向后兼容性,并且已经回滚。 您必须自己使用UTF-8进行BOM识别。

Apache Commons IO包含您要查找的内容,请参阅org.apache.commons.io.ByteOrderMark

就我所见,JDK中没有任何内容,也没有任何Apache项目。

Eclipse EMF有一个Enum,但它提供了支持:

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

我不确定这对你有什么帮助吗?

这里有关于每种编码类型的各种BOM的更多信息,你可以为此编写一个简单的辅助类或枚举…

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

希望有所帮助。 我很惊讶这不是在Commons I / O中说实话。

您可以像这样生成BOM:

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

如果您希望使用此方法为其他编码创建BOM,请确保使用不会自动插入BOM的编码版本,否则将重复该编码。 此技术仅适用于Unicode编码,不会为其他人生成有意义的结果(如Windows-1252)。

  • Unicode BOM常见问题
  • Sun Java 6支持编码
  • Sun Java 5支持编码

值得注意的是,许多编码不使用任何字节顺序标记。 例如,UTF-8中的空字符串只是一个空字节[]。 虽然为UTF-8指定了BOM,但它很少在Java中使用,并且不总是受支持。