当前位置:  开发笔记 > 编程语言 > 正文

从File.ReadAllBytes(byte [])中删除字节顺序标记

如何解决《从File.ReadAllBytes(byte[])中删除字节顺序标记》经验,为你挑选了2个好方法。

我有一个HTTPHandler,它读取一组CSS文件并将它们组合起来然后GZipping它们.但是,一些CSS文件包含一个字节顺序标记(由于TFS 2005自动合并中的一个错误),而在FireFox中,BOM被作为实际内容的一部分被读取,因此它搞砸了我的类名等.我怎样才能剥离出BOM字符?有没有一种简单的方法可以在没有手动浏览字节数组的情况下查找""?



1> JaredPar..:

用样本扩展Jon的评论.

var name = GetFileName();
var bytes = System.IO.File.ReadAllBytes(name);
System.IO.File.WriteAllBytes(name, bytes.Skip(3).ToArray());


引用OP:*但是,某些CSS文件包含字节顺序标记*...**一些**..所以上面的代码在它跳过它之前不检查是否有BOM ...

2> Olivier de R..:

扩展JaredPar示例以递归子目录:

using System.Linq;
using System.IO;
namespace BomRemover
{
    /// 
    /// Remove UTF-8 BOM (EF BB BF) of all *.php files in current & sub-directories.
    /// 
    class Program
    {
        private static void removeBoms(string filePattern, string directory)
        {
            foreach (string filename in Directory.GetFiles(directory, file  Pattern))
            {
                var bytes = System.IO.File.ReadAllBytes(filename);
                if(bytes.Length > 2 && bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF)
                {
                    System.IO.File.WriteAllBytes(filename, bytes.Skip(3).ToArray()); 
                }
            }
            foreach (string subDirectory in Directory.GetDirectories(directory))
            {
                removeBoms(filePattern, subDirectory);
            }
        }
        static void Main(string[] args)
        {
            string filePattern = "*.php";
            string startDirectory = Directory.GetCurrentDirectory();
            removeBoms(filePattern, startDirectory);            
        }       
    }
}

在您尝试执行基本PHP下载文件时发现UTF-8 BOM损坏文件后,我需要C#代码片段.

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有