我有一个HTTPHandler,它读取一组CSS文件并将它们组合起来然后GZipping它们.但是,一些CSS文件包含一个字节顺序标记(由于TFS 2005自动合并中的一个错误),而在FireFox中,BOM被作为实际内容的一部分被读取,因此它搞砸了我的类名等.我怎样才能剥离出BOM字符?有没有一种简单的方法可以在没有手动浏览字节数组的情况下查找""?
用样本扩展Jon的评论.
var name = GetFileName(); var bytes = System.IO.File.ReadAllBytes(name); System.IO.File.WriteAllBytes(name, bytes.Skip(3).ToArray());
扩展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#代码片段.