Невозможно перевести символ Unicode

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

person Community    schedule 10.10.2008    source источник


Ответы (2)


Ваше преобразование работает нормально. Проблема в том, что преобразование выдает символ, который не поддерживается кодировкой содержимого выходного потока. Установите ContentEncoding на HttpResponse на Encoding.UTF16, и эта проблема должна исчезнуть.

person Robert Rossney    schedule 11.10.2008
comment
... или Encoding.UTF8, который обычно предпочтительнее, потому что он меньше для написания на основе латиницы (включая английский). (Я поражен, что это уже не по умолчанию — это должно быть!) - person Timwi; 01.08.2010

Какова кодировка документа входного XML, над которым работает ваш XSL? Вы должны иметь возможность установить это, тогда XSL будет знать, чего ожидать.

person AmbroseChapel    schedule 11.10.2008