我正在寻找一种实用方法或 Java 中的常量,它将返回与编码的适当字节顺序标记相对应的字节,但我似乎找不到。有吗?我真的很想做类似的事情:
byte[] bom = Charset.forName( CharEncoding.UTF8 ).getByteOrderMark();
CharEncoding
来自 Apache Commons 。
我正在寻找一种实用方法或 Java 中的常量,它将返回与编码的适当字节顺序标记相对应的字节,但我似乎找不到。有吗?我真的很想做类似的事情:
byte[] bom = Charset.forName( CharEncoding.UTF8 ).getByteOrderMark();
CharEncoding
来自 Apache Commons 。
Apache Commons IO 包含您要查找的内容,请参阅org.apache.commons.io.ByteOrderMark
.
您可以像这样生成 BOM:
byte[] utf8_bom = "\uFEFF".getBytes("UTF-8");
byte[] utf16le_bom = "\uFEFF".getBytes("UnicodeLittleUnmarked");
如果您希望使用此方法为其他编码创建 BOM,请确保使用不会自动插入 BOM 的编码版本,否则会重复。此技术仅适用于 Unicode 编码,不会对其他人产生有意义的结果(如 Windows-1252)。
据我所知,JDK 中没有任何东西,也没有任何 Apache 项目。
Eclipse EMF 有一个 Enum,但是它提供了支持:
org.eclipse.emf.ecore.resource.ContentHandler.ByteOrderMark
不知道对你有没有帮助?
这里有一些关于每种编码类型的各种 BOM 的更多信息,您可以为此编写一个简单的帮助程序类或枚举...
http://mindprod.com/jgloss/bom.html
希望有帮助。老实说,我很惊讶这不在 Commons I/O 中。
值得注意的是,许多编码不使用任何字节顺序标记。例如,UTF-8 中的空字符串只是一个空字节[]。虽然为 UTF-8 指定了 BOM,但它在 Java 中很少使用,并且并不总是受支持。