0

我正在使用文件系统观察程序来选择和转换文件的编码,文件在目的地被复制但没有转换。我之前使用过以下代码:

 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);
  }
} 

但这根本没有进行转换。目的地。文件仍然是ansi。它没有转换为 utf8。我在这里做错了吗

4

1 回答 1

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
    };
于 2013-02-14T11:14:38.567 回答