【问题标题】:Generate XML, incorrect content-length生成 XML,内容长度不正确
【发布时间】:2011-12-14 23:52:08
【问题描述】:

我在这里使用公认的答案:Transmit generated XML file without saving to disk

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

【问题讨论】:

    标签: c# asp.net xml


    【解决方案1】:

    Content-Length 标头计算字节数,而不是字符数。 String.Length 计算字符数。你可能想要一些类似的东西

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

    【讨论】:

    • 谢谢!像魅力一样工作:)
    【解决方案2】:

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

    在这种情况下,它将使用编码,可能是 UTF16,但 C# 将其称为 unicode。

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

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

    【讨论】:

      【解决方案3】:

      如果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);
      }
      

      【讨论】:

        猜你喜欢
        • 2012-09-29
        • 1970-01-01
        • 1970-01-01
        • 2019-12-13
        • 1970-01-01
        • 2016-03-17
        • 2018-12-22
        • 1970-01-01
        • 2011-08-21
        相关资源
        最近更新 更多