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

时间:2009-04-02 23:20:53

标签: java unicode byte-order-mark

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

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

CharEncoding来自Apache Commons。

5 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

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

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

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

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

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

您可以像这样生成BOM:

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

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