Невозможно перевести символ Unicode - PullRequest
1 голос
/ 11 октября 2008

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

Ответы [ 2 ]

1 голос
/ 11 октября 2008

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

0 голосов
/ 11 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...