无法翻译Unicode字符

时间:2008-10-10 21:40:14

标签: xml xslt

我有一个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();

2 个答案:

答案 0 :(得分:1)

你的改造工作正常。问题是转换正在发出输出流的内容编码不支持的字符。将ContentEncoding上的HttpResponse设置为Encoding.UTF16,此问题就会消失。

答案 1 :(得分:0)

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