ASP.NET中的Response.Output是否修改了流中文件的编码?

时间:2012-12-19 15:19:12

标签: file encoding stream response

在我的 ASP.NET Web Forms 应用程序中,我必须让用户下载XML文件。为此,当他们按下载按钮时,执行以下代码:

Response.Clear()
Response.CacheControl = "Private"
Response.Cache.SetExpires(DateTime.Now.AddMinutes(3))
Response.ContentEncoding = Encoding.GetEncoding("ISO-8859-1")
Response.ContentType = "text/xml"
Response.AddHeader("Content-Disposition", String.Format("attachment; filename={0}.xml", fileName))
Dim xmlFile As String = _xmlServices.GetXmlFile(fileId);

If Not String.IsNullOrEmpty(xmlFile) Then
    Dim xdoc As XmlDocument = New XmlDocument()
    xdoc.LoadXml(xmlFile)
    xdoc.Save(Response.Output)
End If

Response.Flush()
Response.End()

GetXmlFile(fileId)函数返回包含XML的字符串。获得的字符串已经具有指定的编码(<?xml version="1.0" encoding="ISO-8859-1"?>)和签名。这意味着如果文件被修改,签名就不再有效了。

我对 WPF应用程序使用相同的函数GetXmlFile(fileId) ,它完美无缺。

在我的ASP.NET应用程序中,我有两个问题:

  1. 如果我没有明确指定Response.ContentEncoding = Encoding.GetEncoding("ISO-8859-1"),则下载的XML文件具有编码<?xml version="1.0" encoding="UTF-8"?>。这不是一个大问题。

  2. ASP.NET应用程序下载的XML文件比从 WPF应用程序下载的文件多一个回车符。这些文件可能看起来与解析相同,因为回车符出现在标记的末尾,而不会影响数据。但签名无效,因为文件在放置后已被更改。

  3. 因此,我认为Response.Output流以某种方式修改了文件。或者这个错误背后可能有另一个原因?

0 个答案:

没有答案