我正在尝试打开一个xml文件(ansi)并将其转换并保存为UTF-8。
这是我的代码:
using System;
using System.IO;
using System.Text;
using System.Xml;
class Test
{
public static void Main()
{
string path = @"C:\test\test.xml";
string path_new = @"C:\test\test_new.xml";
try
{
XmlTextReader reader = new XmlTextReader(path);
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = new UTF8Encoding(false);
using (var writer = XmlWriter.Create(path_new, settings))
{
reader.Save(writer);
}
}
catch (Exception e)
{
Console.WriteLine("The process failed: {0}", e.ToString());
}
}
}
我收到错误'System.Xml.XmlTextReader'不包含'Save'的定义,并且没有扩展方法'Save'接受类型'System.Xml.XmlTextReader'的第一个参数可以找到(是你错过了使用指令或程序集引用?)
我在这里缺少什么课?我的代码是否正确完成工作
编辑:
好的,这是另一个给我异常的代码:
using System;
using System.IO;
using System.Text;
using System.Xml;
class Test
{
public static void Main()
{
string path = @"C:\project\rdsinfo.xml";
//string path_new = @"C:\project\rdsinfo_new.xml";
try
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(path);
}
catch (Exception e)
{
Console.WriteLine("The process failed: {0}", e.ToString());
}
}
}
它给了我一个异常,给定编码中的无效字符。
答案 0 :(得分:3)
这很简单:
string path = @"C:\test\test.xml";
string path_new = @"C:\test\test_new.xml";
Encoding utf8 = new UTF8Encoding(false);
Encoding ansi = Encoding.GetEncoding(1252);
string xml = File.ReadAllText(path, ansi);
XDocument xmlDoc = XDocument.Parse(xml);
File.WriteAllText(
path_new,
@"<?xml version=""1.0"" encoding=""utf-8""?>" + xmlDoc.ToString(),
utf8
);
将ANSI编码(示例中的1252)更改为ANSI文件所在的编码 - 请参阅 list of encodings
答案 1 :(得分:1)
您可以使用您的XmlTextWriter实例writer
将此Xml写入文件。该类包含许多可用于生成输出文件的方法(即writer.WriteString()
)。
参考资料可在以下网址找到: http://msdn.microsoft.com/en-us/library/system.xml.xmltextwriter.aspx
利用这个问题的答案可以找到更好的方法: Convert utf-8 XML document to utf-16 for inserting into SQL