使用Java删除BOM字符

Jam*_*sev 17 java vi byte-order-mark

使用Java作为vis 的等价物需要发生什么

:set nobomb
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*ach 48

Java无法正确处理BOM.事实上,Java像处理其他所有char一样处理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;
}
Run Code Online (Sandbox Code Playgroud)

可能我会使用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则可以(并且Microsoft习惯于编写带有BOM的UTF-16文件,而不良的工具通常会使用BOM将其转换为UTF-8)。 (2认同)
  • UTF-8 BOM 由 3 个字节组成,而不是 2 个字节。 (2认同)

The*_*now 12

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