C# 如何在C语言中正确编码XML文件#

C# 如何在C语言中正确编码XML文件#,c#,xml,asp.net-mvc,encoding,C#,Xml,Asp.net Mvc,Encoding,我有以下代码,可以在web浏览器中将XML返回给用户 public FileResult GetReportParameters(string reportId) { string parameters = "<?xml version=\"1.0\" encoding=\"UTF-16\"?>\r\n" + LoadXml(reportId).ToString(); return File(System.Text.Encoding.Unicode.

我有以下代码,可以在web浏览器中将XML返回给用户

public FileResult GetReportParameters(string reportId)
{
    string parameters = "<?xml version=\"1.0\" encoding=\"UTF-16\"?>\r\n" +
        LoadXml(reportId).ToString();

    return File(System.Text.Encoding.Unicode.GetBytes(parameters), "application/xml");
}
公共文件结果GetReportParameters(字符串reportId) { 字符串参数=“\r\n”+ LoadXml(reportId).ToString(); 返回文件(System.Text.Encoding.Unicode.GetBytes(参数),“application/xml”); } LoadXML从数据库中加载XML,并将其作为XElement对象返回。C#中的字符串是UTF-16。因此,为了确保所有内容都正确编码,我为编码指定了UTF-16,并使用Unicode编码将文本转换为文件构造函数的byte[]数组

当我从VisualStudio运行它时,它工作正常并显示在IE的XML可视化工具中。然而,在我将其发布到我们的web服务器之后,它就不工作了,IE给出了以下错误

无法显示XML页面,无法使用XSL查看XML输入 样式表。请更正错误,然后单击“刷新” 按钮,或稍后再试


名称以无效字符开头。错误处理 资源

通过使用UTF-8,我能够让它显示在IE的XML可视化工具中

public FileResult GetReportParameters(string reportId)
{
    string parameters = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" +
        LoadXml(reportId).ToString();

    return File(System.Text.Encoding.UTF8.GetBytes(parameters), "application/xml");
}
公共文件结果GetReportParameters(字符串reportId) { 字符串参数=“\r\n”+ LoadXml(reportId).ToString(); 返回文件(System.Text.Encoding.UTF8.GetBytes(参数),“application/xml”); } 但是,任何unicode字符都不会显示错误吗?正确的方法是什么


谢谢

我会尝试保存代码生成的文件,并在PSPad中以HexMode打开它,或者使用另一个编辑器查看各个字节。也许IE只查看文件开头的字节顺序标记(BOM),而忽略“encoding=UTF16”属性。如果没有BOM表,XML标准规定编码为UTF8,大多数软件可以识别该标准。

UTF-8也是Unicode,请参阅。我不知道你为什么认为你需要使用UTF-16,但UTF-8是我通常使用的,也是我通常看到其他人使用的。我在某处读到,c#字符串存储为unicode,而对于System.Text.Encoding.unicode,文档中说“使用小尾端字节顺序获取UTF-16格式的编码”。所以我推断这就是c#存储字符串的方式,我应该使用UTF-16。我想c#如何在内部存储字符串并不重要。然而,如果我使用UTF-16编码(使用Encoding.Unicode)并告诉IE使用UTF-16,它不应该工作吗?在任何情况下,unicode字符串似乎都可以以各种方式正确编码。所以如果UTF8有效的话,我就用UTF8来做这个。哦,我读了一些书。XML标准要求使用UTF8编码。因此,使用不同的编码可能会导致读取XML的程序甚至无法读取表示使用了什么编码的XML属性。