4

我正在寻找一种实用方法或 Java 中的常量,它将返回与编码的适当字节顺序标记相对应的字节,但我似乎找不到。有吗?我真的很想做类似的事情:

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

CharEncoding来自 Apache Commons 。

4

5 回答 5

4

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

要点是添加了支持,破坏了向后兼容性,并被回滚。您必须自己在 UTF-8 中进行 BOM 识别。

于 2009-04-21T20:03:23.170 回答
3

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

于 2012-09-13T15:41:57.147 回答
2

您可以像这样生成 BOM:

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

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

于 2009-04-03T09:42:06.277 回答
1

据我所知,JDK 中没有任何东西,也没有任何 Apache 项目。

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

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

不知道对你有没有帮助?

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

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

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

于 2009-04-03T00:03:34.233 回答
1

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

于 2009-04-03T06:23:09.280 回答