1

我有一个 ASPX 页面,它从 SQL 数据创建一个 XMLDocument 对象,然后使用带有 XPathNavigator 和 XslCompiledTransform 的 XSLT 文件将其转换为另一个 XML 文档(RSS 提要)。有时,数据将包含智能引号 (\u2019),这会导致错误(无法将索引 947 处的 Unicode 字符 \u2019 转换为指定的代码页)。我不确定所有编码设置是如何工作的,但有没有办法防止这种情况发生,而无需在创建 XML 属性时检查所有数据中的这些类型的字符?

我的 XSLT 文件看起来像这样......

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="xml" version="1.0" encoding="iso-8859-1"/>

我尝试将 xsl:output 编码更改为 utf-8 和 utf-16 但仍然遇到同样的问题。有任何想法吗?

如果有帮助,这是我的代码...

XmlDocument xdoc = new XmlDocument();
XmlNode xnode = requests.XMLNode(xdoc, imageType, Request, promotionPageId, eventPageId);
xdoc.AppendChild(xnode);

Response.Clear();
Response.ContentType = "text/xml";
Response.AddHeader("Content-Type", "text/xml");

if (xsltFile != string.Empty)
{
    XPathNavigator xnav = xdoc.CreateNavigator();
    XslCompiledTransform xslTransform = new XslCompiledTransform();
    xslTransform.Load(Server.MapPath(string.Format("~/xslt/{0}.xslt", xsltFile)));
    xslTransform.OutputSettings.Encoding.
    xslTransform.Transform(xnav, null, Response.OutputStream);
}
else
{
    xdoc.Save(Response.OutputStream);
}

Response.End();
4

2 回答 2

1

您的转换工作正常。问题是转换发出的字符不受输出流的内容编码支持。设置ContentEncodingHttpResponseEncoding.UTF16这个问题应该会消失。

于 2008-10-11T19:52:33.817 回答
0

您的 XSL 正在处理的输入 XML 的文档编码是什么?您应该能够设置它,然后 XSL 将知道会发生什么。

于 2008-10-11T09:22:32.637 回答