C# 生成XML,内容长度不正确

C# 生成XML,内容长度不正确,c#,asp.net,xml,C#,Asp.net,Xml,我在这里使用公认的答案: 我如何知道内容长度?我使用的是doc.OuterXml.Length.ToString(),但我的结尾缺少20-30个字符。您可能是通过http请求传递XML?在这种情况下,数据以字节的形式传递。您需要以字节为单位的长度,而不是以字符为单位的长度。所以,获取这些字节的长度,而不是字符串的长度 在本例中,它将使用一种编码,可能是UTF16,但C#称之为unicode 您有几种方法可能会有所帮助: Encoding.Unicode.GetBytes(someString);

我在这里使用公认的答案:


我如何知道内容长度?我使用的是
doc.OuterXml.Length.ToString()
,但我的结尾缺少20-30个字符。

您可能是通过http请求传递XML?在这种情况下,数据以字节的形式传递。您需要以字节为单位的长度,而不是以字符为单位的长度。所以,获取这些字节的长度,而不是字符串的长度

在本例中,它将使用一种编码,可能是UTF16,但C#称之为unicode

您有几种方法可能会有所帮助:

Encoding.Unicode.GetBytes(someString);
Encoding.Unicode.GetByteCount(someString);

如果XML不是太大,可以将其写入
内存流
,然后传输
内存流
的内容

using (var ms = new MemoryStream())
{
    using (var writer = XmlWriter.Create(ms))
    {
        // write your XML here...
    }
    Response.ContentLength = ms.Length;
    Response.OutputStream.Write(ms.ToArray(), 0, ms.Length);
}

内容长度
标题计数的是字节,而不是字符<代码>字符串。长度计算字符数。你可能想要一些类似的东西

Response.AddHeader("Content-Length", 
                   Response.ContentEncoding.GetByteCount(output).ToString());

非常感谢。工作就像一个符咒:)