【发布时间】:2014-01-22 17:39:16
【问题描述】:
我有这段代码可以在 Web 浏览器中将 XML 返回给用户。
public FileResult GetReportParameters(string reportId)
{
string parameters = "<?xml version=\"1.0\" encoding=\"UTF-16\"?>\r\n" +
LoadXml(reportId).ToString();
return File(System.Text.Encoding.Unicode.GetBytes(parameters), "application/xml");
}
LoadXML 从数据库加载 XML 并将其作为 XElement 对象返回。 C# 中的字符串是 UTF-16。因此,为了确保所有内容都保持正确编码,我为编码指定了 UTF-16,并使用 Unicode 编码将文本转换为 File 构造函数的 byte[] 数组。
当我从 Visual Studio 运行它时,它工作正常并显示在 IE 的 XML 可视化器中。但是,在我将它发布到我们的网络服务器后,它不起作用,IE 给出了以下错误。
无法显示 XML 页面 无法使用 XSL 查看 XML 输入 样式表。请更正错误,然后单击刷新 按钮,或稍后再试。
名称以无效字符开头。错误处理 资源
通过改用 UTF-8,我能够让它在 IE 的 XML 可视化器中显示。
public FileResult GetReportParameters(string reportId)
{
string parameters = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" +
LoadXml(reportId).ToString();
return File(System.Text.Encoding.UTF8.GetBytes(parameters), "application/xml");
}
但是,不会有任何 unicode 字符显示错误吗?这样做的正确方法是什么?
谢谢
【问题讨论】:
-
UTF-8 也是 Unicode,参见 en.wikipedia.org/wiki/UTF-8。我不确定您为什么认为需要使用 UTF-16,但 UTF-8 是我通常使用的,也是我经常看到其他人使用的。
-
我在某处读到 c# 字符串存储为 unicode,对于 System.Text.Encoding.Unicode,文档说“使用 little endian 字节顺序获取 UTF-16 格式的编码”。所以我推断这就是 c# 存储字符串的方式,我应该使用 UTF-16。我想c#如何在内部存储字符串并不重要。但是,如果我以 UTF-16(使用 Encoding.Unicode)编码并告诉 IE 使用 UTF-16,它不应该工作吗?无论如何,似乎 unicode 字符串可以以各种方式正确编码。因此,如果 UTF8 有效,那么我将为此使用 UTF8。
-
哦,又读了一些东西。 XML 标准规定使用 UTF8 编码。因此,使用不同的编码可能会导致读取 XML 的程序甚至无法读取说明使用了何种编码的 xml 属性。
标签: c# xml asp.net-mvc encoding