【发布时间】:2014-11-02 01:26:09
【问题描述】:
我正在使用序列化<T> 的例程。它可以工作,但是当下载到浏览器时,我看到一个空白页面。我可以查看页面源代码或在文本编辑器中打开下载并看到 xml,但它是 UTF-16 格式,我认为这就是浏览器页面显示空白的原因?
如何修改我的序列化程序以返回 UTF-8 而不是 UTF-16?
返回的 XML 源:
<?xml version="1.0" encoding="utf-16"?>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<string>January</string>
<string>February</string>
<string>March</string>
<string>April</string>
<string>May</string>
<string>June</string>
<string>July</string>
<string>August</string>
<string>September</string>
<string>October</string>
<string>November</string>
<string>December</string>
<string />
</ArrayOfString>
对序列化程序的示例调用:
DateTimeFormatInfo dateTimeFormatInfo = new DateTimeFormatInfo();
var months = dateTimeFormatInfo.MonthNames.ToList();
string SelectionId = "1234567890";
return new XmlResult<List<string>>(SelectionId)
{
Data = months
};
序列化器:
public class XmlResult<T> : ActionResult
{
private string filename = DateTime.Now.ToString("ddmmyyyyhhss");
public T Data { private get; set; }
public XmlResult(string selectionId = "")
{
if (selectionId != "")
{
filename = selectionId;
}
}
public override void ExecuteResult(ControllerContext context)
{
HttpContextBase httpContextBase = context.HttpContext;
httpContextBase.Response.Buffer = true;
httpContextBase.Response.Clear();
httpContextBase.Response.AddHeader("content-disposition", "attachment; filename=" + filename + ".xml");
httpContextBase.Response.ContentType = "text/xml";
using (StringWriter writer = new StringWriter())
{
XmlSerializer xml = new XmlSerializer(typeof(T));
xml.Serialize(writer, Data);
httpContextBase.Response.Write(writer);
}
}
}
【问题讨论】:
-
我认为这篇文章给了你你想要的东西:stackoverflow.com/questions/22453036/…
-
“它是 UTF-16 格式,我认为这就是为什么浏览器页面显示空白?” 我认为没有理由这么想。调查你的文件,它实际上是什么编码?开始时有任何 BOM 代码吗?等
标签: c# xml utf-8 xml-serialization