2008-10-10 11 views
1

J'ai une page ASPX qui crée un objet XMLDocument à partir de données SQL, puis le transforme en un autre document XML (flux RSS) en utilisant un fichier XSLT avec XPathNavigator et XslCompiledTransform. Parfois, les données contiendront des guillemets intelligents (\ u2019) qui se traduiront par une erreur (Impossible de traduire le caractère Unicode \ u2019 à l'index 947 en une page de code spécifiée). Je ne suis pas sûr de savoir comment fonctionnent tous les paramètres d'encodage, mais existe-t-il un moyen d'empêcher cela sans avoir à vérifier ces types de caractères dans toutes les données lorsque je crée les attributs XML?Impossible de traduire le caractère Unicode

Mon fichier XSLT ressemble à ceci ...

<?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"/> 

J'ai essayé de changer le xsl: l'encodage de sortie utf-8 et UTF-16, mais toujours du même problème. Des idées?

Voici mon code si cela aide ...

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(); 

Répondre

0

Quel est le codage de document de XML d'entrée de votre XSL travaille sur? Vous devriez être en mesure de régler cela, alors le XSL saura à quoi s'attendre.

1

Votre transformation fonctionne correctement. Le problème est que la transformation émet un caractère qui n'est pas pris en charge par le codage de contenu du flux de sortie. Définir le ContentEncoding sur le HttpResponse à Encoding.UTF16 et ce problème devrait disparaître.

+1

... ou 'Encoding.UTF8', qui est généralement préféré car il est plus petit pour l'écriture basée sur le latin (y compris l'anglais). (Je suis étonné que ce n'est pas déjà le défaut - il devrait être!) – Timwi

Questions connexes