打开XML文件并将其转换为UTF-8

时间:2013-01-13 08:25:15

标签: c# xml utf-8 ansi

我正在尝试打开一个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());
    }
}
}

它给了我一个异常,给定编码中的无效字符。

2 个答案:

答案 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