Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XML声明和转换_C#_Xml_Declaration - Fatal编程技术网

C# XML声明和转换

C# XML声明和转换,c#,xml,declaration,C#,Xml,Declaration,我得到一个xml文件,我想从ansi转换成UTF-8。最初,我的代码可以正常工作,因为原始xml文件没有xml声明。但最近,原始xml文件附带了以下声明: <?xml version="1.0" encoding="WINDOWS-1256"?> 在我的代码中,我正在进行从ansi到uft-8的转换,并添加另一个标题: <?xml version="1.0" encoding="utf-8"?> 因此,在我通过代码传递新文件以转换为utf-8之后,新声明是

我得到一个xml文件,我想从ansi转换成UTF-8。最初,我的代码可以正常工作,因为原始xml文件没有xml声明。但最近,原始xml文件附带了以下声明:

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

在我的代码中,我正在进行从ansi到uft-8的转换,并添加另一个标题:

<?xml version="1.0" encoding="utf-8"?>

因此,在我通过代码传递新文件以转换为utf-8之后,新声明是:

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

我认为这是无效的

下面是我的代码:

Encoding utf8 = new UTF8Encoding(false);
Encoding ansi = Encoding.GetEncoding(1256);
System.Threading.Thread.Sleep(2000);

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);
Encoding utf8=新的utf8编码(false);
Encoding ansi=Encoding.GetEncoding(1256);
系统线程线程睡眠(2000);
字符串xml=File.ReadAllText(文件名,ansi);
//XDocument xmlDoc=XDocument.Parse(xml);
//控制台写入线(“第一”);
File.writealText(
文件名,
@“”+xml.ToString(),
utf8
);
if(File.Exists(destinationFile))
文件.Delete(destinationFile);
File.Copy(文件名,destinationFile,true);
Console.WriteLine(“文件复制”+“”+DateTime.Now.ToString(“HH:mm:ss tt”);//仅用于故障诊断
控制台。WriteLine(“按'q\'退出”);
控制台写入(CrL);

这篇文章的输出是带有两个声明的乱码阿拉伯文本。我的代码哪里错了。

正确地用string.Concat构建XML非常困难,需要深入理解规范才能正确地完成。不幸的是,通过阅读规范,我们了解到专门的API更适合处理XML,因此不可能真正回答您的问题

相反,请考虑使用常规的XML API -代码> XMLDebug 或<代码> XObjs这两种方法在您的情况下都会很好。要以您选择的编码保存文件,您只需要使用您喜欢的编码创建XmlWriter,如中所述

使用带有设置的XmlWriter将文档保存到文件中

XmlWriterSettings settings = new XmlWriterSettings{Encoding=Encoding.UTF8};
using(var fileStream = File.OpenWrite(destinationFile))
{
  using(var writer = XmlWriter.Create(fileStream, settings))  
  {
    doc.Save(writer);
  }
}

我遇到以下错误:无法将“System.Xml.XmlWriterSettings”转换为“System.Text.Encoding”,谢谢,但由于某些原因,输出文件不是UTF-8编码。为什么呢?我已经交叉验证了这一点,输出文件仍然是ansi。上述情况下不会发生转换code@user726720你说的“我”是什么意思?(我已经删除了XmlTextWriter版本,该版本并没有像我预期的那样工作…)是的,我感到困惑。事实上,我有使用记事本++的习惯。在notepadd++中的编码中,它没有显示编码。但如果我在记事本中打开它,它会显示utf-8。我已经将设置添加到ident,因为上面的代码在一行中给出了没有identiation的结果。这也会引发异常:System.IO.IOException:进程无法访问该文件。其中,作为旧版本(xmltextwriter),未引发此异常。上述异常位于目标位置,而不是源位置。你有什么线索吗?我可以试试其他的解决办法吗
XmlWriterSettings settings = new XmlWriterSettings{Encoding=Encoding.UTF8};
using(var fileStream = File.OpenWrite(destinationFile))
{
  using(var writer = XmlWriter.Create(fileStream, settings))  
  {
    doc.Save(writer);
  }
}