У меня есть страница ASPX, которая создает объект XMLDocument из данных SQL, а затем преобразует его в другой документ XML (RSS-канал) с помощью файла XSLT с XPathNavigator и XslCompiledTransform. Иногда данные будут содержать умные кавычки (\ u2019), что приводит к ошибке (Невозможно преобразовать символ Юникода \ u2019 с индексом 947 в указанную кодовую страницу). Я не уверен, как работают все настройки кодировки, но есть ли способ предотвратить это, не проверяя эти типы символов во всех данных при создании атрибутов 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();





С какой кодировкой входящего XML-документа работает ваш XSL? Вы должны иметь возможность установить это, тогда XSL будет знать, чего ожидать.
Ваше преобразование работает нормально. Проблема в том, что преобразование испускает символ, который не поддерживается кодировкой содержимого выходного потока. Установите ContentEncoding на HttpResponse на Encoding.UTF16, и эта проблема должна исчезнуть.
... или
Encoding.UTF8, который обычно предпочтительнее, потому что он меньше для письма на латинице (включая английский). (Я удивлен, что это еще не значение по умолчанию, а должно быть!)