2013-02-14 41 views
0

我正在使用文件系統觀察器來選擇和轉換文件的編碼,文件被複制到目標但沒有轉換。我用的是下面的代碼前面:文件系統觀察器選擇和轉換XML編碼

string xml = File.ReadAllText(FileName,ansi); 
     XDocument xmlDoc = XDocument.Parse(xml); 
      Console.WriteLine("1st"); 
       File.WriteAllText(
       FileName, 
        @"<?xml version=""1.0"" encoding=""utf-8""?>" + xml.ToString(), 
        utf8 
       ); 


      if (File.Exists(destinationFile)) 
        File.Delete(destinationFile); 
       File.Copy(FileName, destinationFile,true); 
       Console.WriteLine("File Copied" + " " + DateTime.Now.ToString("HH:mm:ss tt")); // for troubleshoooting only 
       Console.WriteLine("Press \'q\' to quit."); 
       Console.Write(CrL); 

但這不是現在的工作,因爲現在我得到的XML文件包含以下標題:

<?xml version="1.0" encoding="WINDOWS-1256"?> 

我剛纔所說下面的代碼:

var doc = new XmlDocument(); 
doc.Load(FileName); 

XmlWriterSettings settings = new XmlWriterSettings { Encoding = Encoding.UTF8, Indent=true }; 

using (var fileStream = File.OpenWrite(destinationFile)) 
{ 
using (var writer = XmlWriter.Create(fileStream, settings)) 
{ 

    doc.Save(writer); 
    } 
} 

但是這根本沒有做轉換。 dest。文件仍然是ansi。它沒有轉換到utf8。我在這裏做得不對

+0

「Dest文件仍然是ANSI。」你如何檢查它? – 2013-02-14 06:51:32

+0

使用記事本或記事本++。它仍然顯示我ansi – user726720 2013-02-14 07:18:02

+0

該代碼(使用'XmlWriter'類)工作得很好:它以BOM形式創建UTF-8編碼的XML文件(使用任何十六進制編輯器打開文件,您可以看到BOM - 前三個字節)。此外,記事本++顯示該文件採用UTF-8編碼。 – 2013-02-14 07:43:27

回答

0

你重寫與原來的這段代碼的輸出文件(XmlWriter寫入的文件):

if (File.Exists(destinationFile)) 
    File.Delete(destinationFile); 
File.Copy(fileName, destinationFile, true); 

只是刪除這些代碼行。

更新

編寫使用Windows-1256編碼的XML文檔:

var settings = new XmlWriterSettings 
    { 
     Encoding = Encoding.GetEncoding("windows-1256"), 
     Indent = true 
    }; 
+0

是的,這工作..謝謝你。 – user726720 2013-02-14 11:48:59