CSharp 去除字符串的 BOM
CSharp 去除字符串的 BOM
此内容年代久远,谨慎参考

BOM 是 Byte Order Mark 的简称,用于告诉文本编辑器等字节数组解析软件,这个文件是哪种编码

UTF-8 是 EF BB BF

UTF-16 / UCS-2 是 FF FE(小端)FE FF(大端)

UTF-32 / UCS-4 是 00 00 FF FE(小端)00 00 FE FF(大端)

csharppublic static String ToUTF8String(ReadOnlySpan<Byte> buffer){
  if(buffer.Count<=3){throw new ArgumentException(nameof(buffer));}
  ReadOnlySpan<Byte> buffer2 = new Byte[3]{0xEF,0xBB,0xBF};
  if(Object.Equals(buffer[0..2],buffer2)){return Encoding.UTF8.GetString(buffer);}
  Encoding withoutBOM = new UTF8Encoding(false);
  return withoutBOM.GetString(buffer[3..]);
}

一般代码文本文件,比如 csharp 的 .cs, java 的 .java 都是 UTF-8 编码,但代码中定义的字符串字面量则是 UTF-16 编码

作者
ragnaroks
发布时间
2015-02-18
创作协议