为什么ASP.NET MVC中的ContentResult控制器在指定UTF-8时返回UTF-16?

时间:2009-10-13 17:54:50

标签: asp.net-mvc utf-8 utf-16 actionresult

我有一个ActionResult,它返回嵌入式设备的XML。相关代码是:

return Content(someString, "text/xml", Encoding.UTF8);

即使指定了UTF-8,生成的XML也是:

<?xml version="1.0" encoding="utf-16"?>

ASP.NET MVC编译为AnyCPU并在Windows 2008服务器上运行。

为什么不返回UTF-8编码的XML?

1 个答案:

答案 0 :(得分:11)

您将HTTP响应的编码与响应中包含的XML编码混淆。序列化XML时,需要指定它需要进行UTF-8编码。在ContentResult上设置编码只是告诉另一端的浏览器如何编码响应,它不会将XML从一种编码转换为另一种编码。如果您查看ContentResult的代码,您将看到它只是执行Response.Write(内容) - 在使用您指定的编码和内容类型设置Response头之后。