【问题标题】:Removing BOM characters using Java [duplicate]使用 Java 删除 BOM 字符 [重复]
【发布时间】:2014-03-20 10:30:56
【问题描述】:

使用 Java 的字符串需要发生什么才能等效于 vis

:set nobomb

假设BOM来自我正在阅读的文件。

【问题讨论】:

  • Java 中的字符串没有 BOM...除非您从有 BOM 的源中读取
  • 这正是发生的事情。我正在阅读恰好有这个标记的文件
  • 你至少知道使用什么编码(UTF-8、UTF-16 LE/BE)吗?
  • 如果您有选项,只需使用 Notepad++ 或 SublimeText 打开文件,然后在没有 BOM 的情况下重新保存它。否则,您需要知道编码类型才能以编程方式完成

标签: java vi byte-order-mark


【解决方案1】:

Java 无法正确处理 BOM。事实上,Java 像处理其他所有字符一样处理 BOM。

找到这个:

http://www.rgagnon.com/javadetails/java-handle-utf8-file-with-bom.html

public static final String UTF8_BOM = "\uFEFF";

private static String removeUTF8BOM(String s) {
    if (s.startsWith(UTF8_BOM)) {
        s = s.substring(1);
    }
    return s;
}

也许我会改用 apache IO:

http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/input/BOMInputStream.html

【讨论】:

  • UTF8_BOM 是一个错误的名称。 BOM 中没有任何内容将其链接到 UTF-8。相反,UTF-8 不需要 BOM,而 UTF-16 可能需要(微软有用 BOM 编写 UTF-16 文件的坏习惯,这些文件经常被不良工具转换为带有 BOM 的 UTF-8)。
  • UTF-8 BOM 由 3 个字节组成,而不是 2 个。
【解决方案2】:

对于 UTF-8,BOM 为:0xEF、0xBB、0xBF

【讨论】:

    猜你喜欢
    • 2014-12-03
    • 2015-01-06
    • 2010-09-22
    • 2016-01-04
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    • 2019-06-02
    相关资源
    最近更新 更多