我正在获取一个我想从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 :(得分:1)
使用string.Concat正确构造XML非常困难,需要深入理解要正确完成的规范。不幸的是,通过阅读规范,我们发现专业API更适合操纵XML - 所以对你的问题没有真正的答案。
相反,请考虑使用常规的Xml API - XmlDocument
或XDocument
这两种方法在您的情况下都能正常运行。要以您选择的编码方式保存文件,您只需使用XmlWriterSettings.Encoding中所述的编码创建XmlWriter。
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);
}
}