我有一个ASPX页面,它从SQL数据创建XMLDocument对象,然后使用带有XPathNavigator和XslCompiledTransform的XSLT文件将其转换为另一个XML文档(RSS提要)。有时,数据将包含智能引号(\ u2019),这会导致错误(无法将索引947处的Unicode字符转换为指定的代码页)。我不确定所有编码设置是如何工作的,但有没有办法防止这种情况,而不必在创建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();
答案 0 :(得分:1)
你的改造工作正常。问题是转换正在发出输出流的内容编码不支持的字符。将ContentEncoding
上的HttpResponse
设置为Encoding.UTF16
,此问题就会消失。
答案 1 :(得分:0)
您的XSL正在处理的输入XML的文档编码是什么?您应该能够设置它,然后XSL将知道会发生什么。