用于选择和转换XML编码的文件系统观察程序
本文关键字:文件系统 观察 程序 编码 XML 选择 转换 用于 | 更新日期: 2023-09-27 17:58:58
我使用文件系统观察器来选择和转换文件的编码,文件会在目标位置复制,但不会进行转换。我之前使用了以下代码:
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的转换。我在这里做错了什么吗
您正在通过以下代码用原始文件重写输出文件(由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
};