2013-02-13 110 views
0

我得到一个xml文件,我想从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); 

这个走出来的两个声明为乱码阿拉伯文字的输出。我在哪里错了代码。

+0

任何其他解决方案,我可以尝试 – user726720 2013-02-13 14:20:56

回答

1

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

相反,请考虑使用常规的Xml API - XmlDocumentXDocument都会在你的情况下正常工作。要以您选择的编码保存文件,您只需创建您喜欢的编码的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); 
    } 
} 
+0

我收到以下错误:无法从“System.Xml.XmlWriterSettings”到“System.Text.Encoding” – user726720 2013-02-13 05:51:47

+0

@ user726720,我希望固定采样转换 - 混合2种可能的方法... – 2013-02-13 06:05:15

+0

谢谢你,但由于某种原因输出文件不在UTF-8编码。这是为什么 ?我已经交叉验证了输出文件仍然是ansi。上述代码没有转换发生 – user726720 2013-02-13 06:45:17