最新消息:把Logo换了一下,虽然丑了点,但至少完全是自己的设计

C#删除文件中字节顺序标记(BOM)的方法

CSharp 宇托 765浏览 暂无评论

最近做一个项目,发现解析XML文件时有时出错有时不出错。查了一下原因,发现我的XML文件编码都是UTF-8的。出错时的XML文件是带字节顺序标记(BOM)的,不错的是不带的。

于是,我就在想,是不是用一个通用方法来去掉字节顺序标记(BOM)。因为我的XML文件比较小,所以我是直接把它读取到一个字符串,然后再做其它处理的。

去掉字节顺序标记(BOM)的方法很简单,判断字符串是不是以去掉字节顺序标记(BOM)开头,如果是的话,去掉字节顺序标记(BOM)就行。

其代码如下:

C#
public static string RemoveBom(String desc, Encoding encode)
{
	string bomString = encode.GetString(encode.GetPreamble());
    if (!string.IsNullOrEmpty(bomString) && desc.StartsWith(bomString))
    {
        desc = desc.Remove(0, bomString.Length);
    }
    return desc;
}

另外,附上一些编码的字节顺序标记(BOM)

编码 BOM(十六进制)
UTF-8 EF BB BF
UTF-16(大端序) FE FF
UTF-16(小端序) FF FE
UTF-32(大端序) 00 00 FE FF
UTF-32(小端序) FF FE 00 00
UTF-7 2B 2F 76和以下的一个字节:38, 39, 2B, 2F
en:UTF-1 F7 64 4C
en:UTF-EBCDIC DD 73 66 73
en:Standard Compression Scheme for Unicode 0E FE FF
en:BOCU-1 FB EE 28 及可能跟随着FF
GB-18030 84 31 95 33

参考资料:
Strip Byte Order Mark from string in C#
Byte order mark

转载请注明:宇托的狗窝 » C#删除文件中字节顺序标记(BOM)的方法

发表我的评论
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址