我有一個在一組CSS文件中讀取,並結合他們,然後一個HttpHandler gzip壓縮它們刪除字節順序標記。然而,一些CSS文件包含一個字節順序標記(由於TFS 2005年汽車合併一個bug)和Firefox中的BOM被解讀爲實際內容的一部分,所以它搞砸了我的類名稱等我如何能揭開出BOM字符?有沒有一種簡單的方法來做到這一點,而無需手動通過字節數組尋找「」?從File.ReadAllBytes(字節[])
11
A
回答
7
擴展在Jon's comment用樣品。
var name = GetFileName();
var bytes = System.IO.File.ReadAllBytes(name);
System.IO.File.WriteAllBytes(name, bytes.Skip(3).ToArray());
1
的另一種方法,假設UTF-8爲ASCII。
File.WriteAllText(filename, File.ReadAllText(filename, Encoding.UTF8), Encoding.ASCII);
3
var text = File.ReadAllText(args.SourceFileName);
var streamWriter = new StreamWriter(args.DestFileName, args.Append, new UTF8Encoding(false));
streamWriter.Write(text);
streamWriter.Close();
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);
}
}
}
我需要一個C#代碼段發現了UTF-8 BOM腐敗文件後,當您嘗試做一個基本的PHP下載文件。
相關問題
- 1. 從File.ReadAllBytes拆分結果
- 2. File.ReadAllBytes()內存異常
- 3. 如何使用File.ReadAllBytes在塊
- 4. 從字節讀取字節從Db
- 5. File.readallbytes沒有找到圖像文件
- 6. File.ReadAllBytes保持文件句柄打開
- 7. 從字節[]
- 8. 從字節[]
- 9. 從字節[]
- 10. 從字節[]
- 11. 從字節串
- 12. 從字節
- 13. JNI - 從字節傳輸到字節,從字節到字符串問題
- 14. 無法從字節[]轉換爲字節
- 15. 從字節轉換爲7位字節
- 16. 從一個字節獲取半字節
- 17. 從Java字節中提取半字節
- 18. 創建從字節
- 19. 從字節[]到XmlTextReader
- 20. 從[]字節到char *
- 21. 從字節數組
- 22. 從字節數組
- 23. 從字節數組
- 24. 發現從字節
- 25. 從InputStream Chronicle字節
- 26. 從套接字讀取所有字節停留在52964字節
- 27. 從字節獲取第一行字符與出字節
- 28. Java以字節格式將字節從字節緩衝區寫入文件
- 29. 從字節數組中確定x和y的高字節和低字節
- 30. 獲取的Java字節緩衝區內從字節低和高次半字節
是在BOM中出現的實際文本本身,或者只是在最開始的?除了數據開始之外的任何地方,我都會驚訝地發現它 - 在這種情況下,忽略前3個字節(假設UTF-8)應該做到這一點。 – 2008-11-13 20:14:30
FWIW,你可以打開[記事本++](http://notepad-plus.sourceforge.net/uk/site.htm)的文件,並保存它們沒有字節順序標記。這是我在[這個問題]必須做的(http://stackoverflow.com/questions/291455/xml-data-at-root-level-is-invalid)。 – 2008-11-16 22:56:02
我碰到這個問題來後寫了[以下職位(http://andrewmatthewthompson.blogspot.com/2011/02/byte-order-mark-found-using-net.html)。本質上,我不使用BinaryReader類讀取文件內容的原始字節,而是使用帶有特定構造函數的StreamReader類,該函數會自動從我試圖檢索的文本數據中刪除字節順序標記字符。 – 2011-02-20 21:06:39