【问题标题】:Does Java have methods to get the various byte order marks?Java 是否有获取各种字节顺序标记的方法?
【发布时间】:2010-10-17 06:07:08
【问题描述】:

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

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

CharEncoding 来自 Apache Commons。

【问题讨论】:

标签: java unicode byte-order-mark


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您可以像这样生成 BOM:

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

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

      【讨论】:

      • 我的具体情况是编写一个 UTF-8 的 CSV 文件。据我所知,UTF-8 BOM 是说服 Excel 不要尝试以默认字符编码读取文件的唯一方法。
      • 没有一个实用方法可以帮助您处理 Excel 文件,但是将 0xEF 0xBF 0xBF 写入您的 OutputStream 应该不是问题。只需在将流包装在 UTF-8 编码的 Writer 中之前刷新这些字节。
      • 我不会在常见问题解答中说“不鼓励使用它”。 UTF-8 BOM 确实没有指定“字节顺序标记”(这有点用词不当),但它肯定有助于表明流使用 UTF-8 编码。
      • 这是一个公平的评论 - 我已经更新了帖子。不过,我不禁觉得他们习惯了不使用它:blogs.msdn.com/oldnewthing/archive/2007/04/17/2158334.aspx
      【解决方案4】:

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

      Eclipse EMF 有一个提供支持的 Enum:

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

      我不确定这对你有没有帮助?

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

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

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

      【解决方案5】:

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

      【讨论】:

      • 投反对票,因为这似乎是不正确的书面。包含 UTF-8 BOM (EFBBBF) 的三字节字节序列将被解释为空的 UTF-8 字符串如果应用程序了解如何处理 BOM。 (如果没有,BOM 就会出问题,空字符串或否。)
      • Java 不理解 UTF-8 的 BOM。我见过人们对此感到厌烦(文本编辑器决定添加 BOM,javac puked。)
      • 彼得的回答不正确,见en.wikipedia.org/wiki/…
      猜你喜欢
      • 2010-12-22
      • 1970-01-01
      • 2010-11-09
      • 2011-10-30
      • 1970-01-01
      • 2021-02-17
      • 1970-01-01
      相关资源
      最近更新 更多