如何强制XDocument输出"UTF-8"?在报关行? [英] How can I force XDocument to output "UTF-8" in the declaration line?
问题描述
以下代码产生此输出:
<?xml version="1.0" encoding="utf-16" standalone="yes"?>
<customers>
<customer>
<firstName>Jim</firstName>
<lastName>Smith</lastName>
</customer>
</customers>
如何获取而不是encoding="utf-16"
来生成encoding="utf-8"
?
How can I get it to produce encoding="utf-8"
instead of encoding="utf-16"
?
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Linq;
namespace test_xml2
{
class Program
{
static void Main(string[] args)
{
List<Customer> customers = new List<Customer> {
new Customer {FirstName="Jim", LastName="Smith", Age=27},
new Customer {FirstName="Hank", LastName="Moore", Age=28},
new Customer {FirstName="Jay", LastName="Smythe", Age=44},
new Customer {FirstName="Angie", LastName="Thompson", Age=25},
new Customer {FirstName="Sarah", LastName="Conners", Age=66}
};
Console.WriteLine(BuildXmlWithLINQ(customers));
Console.ReadLine();
}
private static string BuildXmlWithLINQ(List<Customer> customers)
{
XDocument xdoc =
new XDocument(
new XDeclaration("1.0", "utf-8", "yes"),
new XElement("customers",
new XElement("customer",
new XElement("firstName", "Jim"),
new XElement("lastName", "Smith")
)
)
);
var wr = new StringWriter();
xdoc.Save(wr);
return wr.GetStringBuilder().ToString();
}
}
public class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public string Display()
{
return String.Format("{0}, {1} ({2})", LastName, FirstName, Age);
}
}
}
推荐答案
这不是.NET中的错误.这是由于您使用StringWriter
作为XDocument的目标.由于StringWriter内部使用UTF-16,因此文档也必须使用UTF-16作为编码.如果将XDoc保存到流或文件中,它将按照指示使用UTF-8.
This is not a bug in .NET. This is due to you using StringWriter
as the target for your XDocument. Since StringWriter internally uses UTF-16, the document must also use UTF-16 as encoding. If you save the XDoc to a stream or a file, it will use UTF-8 as instructed.
For more information, see MSDN information about StringWriter.Encoding
:
此属性对于某些XML情况是必需的,在这种情况下,必须编写包含StringWriter使用的编码的标头.这样,XML代码就可以使用任意StringWriter并生成正确的XML标头.
This property is necessary for some XML scenarios where a header must be written containing the encoding used by the StringWriter. This allows the XML code to consume an arbitrary StringWriter and generate the correct XML header.
这篇关于如何强制XDocument输出"UTF-8"?在报关行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!