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中使用,并且不总是受支持。