0

我正在获取一个要从 ansi 转换为 UTF-8 的 xml 文件。最初我的代码可以正常工作,因为原始 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);

输出为带有两个声明的乱码阿拉伯文本。我在代码中哪里错了。

4

1 回答 1

1

使用 string.Concat 正确构造 XML 非常困难,需要深入了解规范才能正确完成。不幸的是,通过阅读规范,您会了解到专门的 API 更适合操作 XML - 因此无法真正回答您的问题。

相反,请考虑使用常规 Xml API -XmlDocument或者 XDocument两者都可以在您的情况下正常工作。要以您选择的编码保存文件,您只需要使用您喜欢的编码创建 XmlWriter,如XmlWriterSettings.Encoding中所述。

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

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

XmlWriterSettings settings = new XmlWriterSettings{Encoding=Encoding.UTF8};
using(var fileStream = File.OpenWrite(destinationFile))
{
  using(var writer = XmlWriter.Create(fileStream, settings))  
  {
    doc.Save(writer);
  }
}
于 2013-02-13T05:38:55.187 回答