【发布时间】:2011-12-14 23:52:08
【问题描述】:
我在这里使用公认的答案:Transmit generated XML file without saving to disk
我如何知道内容长度?我使用doc.OuterXml.Length.ToString(),但我最后缺少 20-30 个字符。
【问题讨论】:
我在这里使用公认的答案:Transmit generated XML file without saving to disk
我如何知道内容长度?我使用doc.OuterXml.Length.ToString(),但我最后缺少 20-30 个字符。
【问题讨论】:
Content-Length 标头计算字节数,而不是字符数。 String.Length 计算字符数。你可能想要一些类似的东西
Response.AddHeader("Content-Length",
Response.ContentEncoding.GetByteCount(output).ToString());
【讨论】:
您可能正在通过 http 请求传递 XML?在这种情况下,数据作为字节传递。您想要以字节为单位的长度,而不是以字符为单位的长度。所以,获取这些字节的长度,而不是字符串的长度。
在这种情况下,它将使用编码,可能是 UTF16,但 C# 将其称为 unicode。
您有几个方法可能会有所帮助:
Encoding.Unicode.GetBytes(someString);
Encoding.Unicode.GetByteCount(someString);
【讨论】:
如果XML不太大,可以写到MemoryStream,然后将MemoryStream的内容传送出去。
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);
}
【讨论】: