2010-08-13 6 views
4

J'ai un DataTable que je crée un fichier XML en utilisant .WriteXML (..), même si j'ai un problème avec l'exportation en encodage UTF-16 et il semble y avoir aucun moyen apparent de changer cela. Je comprends que .NET utilise l'UTF-16 en interne dans les chaînes, est-ce correct?Sortie DataTable XML en UTF8 plutôt que UTF16

Je suis alors en cours d'exécution du XML qui DataTable.WriteXML() produit par un XSLT qui comprend les éléments suivants dans la déclaration de sortie:

<xsl:output method="xml" indent="yes" encoding="utf-8" /> 

Mais encore, la sortie de la transformation est en UTF16, et le système que j'essaie d'entrer dans ce fichier XML ne supporte pas UTF16.

Existe-t-il un moyen de forcer la sortie à UTF-8?

+0

Bonne question (+1). Voir ma réponse pour une solution complète. –

Répondre

1

L'encodage du résultat document-est déterminé par l'attribut encoding de l'instruction <xsl:output> - non par la déclaration XML du document XML qui contient la transformation XSLT.

Voici un exemple:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output encoding="utf-8"/> 

<xsl:template match="/"> 
    <t>Hello, world!</t> 
</xsl:template> 
</xsl:stylesheet> 

lorsqu'il est appliqué sur un document XML (non utilisé dans cette simple démo), le résultat souhaité est produit:

<?xml version="1.0" encoding="utf-8"?><t>Hello, world!</t> 

Prenez note : Dans .NET, vous devrez peut-être spécifier des paramètres particuliers du XmlWriter transmis en tant que paramètre à la méthode XslCompiledTransform.Transform(). Voir this pour plus de détails sur la spécification du codage voulu dans la classe XmlWriterSettings.