CSSファイルのセットを読み込んで結合し、GZippingするHTTPHandlerがあります。ただし、一部の CSS ファイルには (TFS 2005 自動マージのバグにより) バイト オーダー マークが含まれており、FireFox では BOM が実際のコンテンツの一部として読み込まれるため、クラス名などが台無しになります。 BOMの文字を?「」を探してバイト配列を手動で調べずにこれを行う簡単な方法はありますか?
JC Grubbs
質問する
15956 次
5 に答える
8
Jon のコメントをサンプルで拡張します。
var name = GetFileName();
var bytes = System.IO.File.ReadAllBytes(name);
System.IO.File.WriteAllBytes(name, bytes.Skip(3).ToArray());
于 2008-11-14T02:54:00.940 に答える
6
JaredPar サンプルを展開してサブディレクトリを再帰する:
using System.Linq;
using System.IO;
namespace BomRemover
{
/// <summary>
/// Remove UTF-8 BOM (EF BB BF) of all *.php files in current & sub-directories.
/// </summary>
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#コードが必要でした。
于 2010-05-19T08:23:39.300 に答える
3
var text = File.ReadAllText(args.SourceFileName);
var streamWriter = new StreamWriter(args.DestFileName, args.Append, new UTF8Encoding(false));
streamWriter.Write(text);
streamWriter.Close();
于 2009-07-16T09:50:02.080 に答える
1
別の方法として、UTF-8をASCIIに仮定します。
File.WriteAllText(filename, File.ReadAllText(filename, Encoding.UTF8), Encoding.ASCII);
于 2008-11-14T08:32:32.830 に答える