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 编码