ASP.NET: Va Sauver un XmlDocument pour la Réponse.OutputStream l'honneur de l'encodage?
je veux envoyer le xml d'un XmlDocument
objet pour le client HTTP, mais je crains que le suggéré soltuion pourrait ne pas honorer le codage de la Response
a été configuré pour utiliser:
public void ProcessRequest(HttpContext context)
{
XmlDocument doc = GetXmlToShow(context);
context.Response.ContentType = "text/xml";
context.Response.ContentEncoding = System.Text.Encoding.UTF8;
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
context.Response.Cache.SetAllowResponseInBrowserHistory(true);
doc.Save(context.Response.OutputStream);
}
Ce que si j'ai changé l'encodage de quelque chose d'autre, Unicode par exemple:
public void ProcessRequest(HttpContext context)
{
XmlDocument doc = GetXmlToShow(context);
context.Response.ContentType = "text/xml";
context.Response.ContentEncoding = System.Text.Encoding.Unicode;
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
context.Response.Cache.SetAllowResponseInBrowserHistory(true);
doc.Save(context.Response.OutputStream);
}
Sera le Response.OutputStream
traduire les données binaires qui a été écrit pour elle à la volée, et de le rendre Unicode?
Ou est le Response.ContentEncoding
juste instructif?
Si le ContentEncoding est juste informatif, le contenu de l'encodage du texte de suivi des chaînes de revenir dans?
context.Response.ContentEncoding = System.Text.Encoding.Unicode;
context.Response.Write("Hello World");
context.Response.ContentEncoding = System.Text.Encoding.UTF8;
context.Response.Write("Hello World");
context.Response.ContentEncoding = System.Text.Encoding.UTF16;
context.Response.Write("Hello World");
context.Response.ContentEncoding = System.Text.Encoding.ASCII;
context.Response.Write("Hello World");
context.Response.ContentEncoding = System.Text.Encoding.BigEndianUnicode;
context.Response.Write("Hello World");
OriginalL'auteur Ian Boyd | 2009-02-13
Vous devez vous connecter pour publier un commentaire.
je l'ai trouvé.
La réponse est non: Le XmlDocument n'honorera pas la ContentEncoding du flux de réponse de l'écriture.
Mise à jour: la bonne façon de le faire
Utilisation
Response.Output
, et PASResponse.OutputStream
.Les deux sont des cours d'eau, mais
Output
est unTextWriter
.Lorsqu'un
XmlDocument
enregistre lui-même à unTextWriter
, il va utiliser l'encodagespécifié par le
TextWriter
. LeXmlDocument
changera automatiquement toutnœud déclaration xml, c'est à dire:
<?xml version="1.0" encoding="ISO-8859-1"?>
pour correspondre à l'encodage utilisé par le
Response.Output
's d'encodage.La
Response.Output
TextWriter
'paramètres d'encodage vient de laResponse.ContentEncoding
valeur.Utilisation
doc.Save
, pasResponse.Write(doc.ToString())
ouResponse.Write(doc.InnerXml)
Vous NE PAS souhaitez Enregistrer le fichier xml en une chaîne de caractères, ou des trucs du xml dans une chaîne de caractères,
et
response.Write
, parce que:Pour résumer: par le fait d'enregistrer un
TextWriter
: le nœud Déclaration XML, le contenu XML,et la Réponse HTML content-encoding correspondent tous à.
Exemple de code:
Le codage de la XmlDocument va utiliser lors de l'enregistrement d'un flux dépend de l'encodage spécifié dans la nœud déclaration xml. par exemple:
Si "UTF-8" encoding est spécifié dans la déclaration xml, puis de les Enregistrer(stream) va utiliser UTF-8 encodage.
Si pas encodage est spécifié, par exemple:
ou la déclaration xml nœud est omise, alors XmlDocument par défaut UTF-8 l'encodage unicode. (Référence)
Certaines communes codages des chaînes, que vous pouvez également les utiliser dans la déclaration xml, sont:
Note: L'attribut de codage n'est pas sensible à la casse:
Si vous avez chargé le fichier XML à partir d'une chaîne ou d'un fichier, et il ne contient pas de déclaration xml nœud, vous pouvez ajouter manuellement un à l'XmlDocument à l'aide de:
Si le XmlDocument ne dispose pas d'une déclaration xml, ou si la déclaration xml n'est pas un attribut de codage, le document enregistré n'en n'aurez pas non plus.
Remarque: Si le XmlDocument est le fait d'enregistrer un TextWriter, puis l'encodage qui va être utilisé est pris à partir de l'objet TextWriter. En outre, la déclaration xml nœud attribut de codage (si présent) sera remplacé par le codage de la TextWriter que le contenu est écrit à la TextWriter. (Référence)
Si l'enregistrement d'une chaîne, le codage utilisé est déterminé par la déclaration xml du nœud attribut de codage, si elle est présente.
Dans mon exemple, je suis en train d'écrire à un client Http par le biais de ASP.NET. je veux la Réponse.Le type d'encodage à une valeur appropriée - et j'ai besoin de correspondre à ce que le XML lui-même.
La façon appropriée de le faire est d'enregistrer le fichier xml de la Réponse.De sortie, plutôt que de la Réponse.OutputStream. La Réponse.La sortie est un TextWriter, qui est la valeur de Codage suit ce que vous définissez pour la Réponse.L'encodage.
En d'autres termes:
résultats en xml:
tout:
résultats en xml:
et
résultats en xml:
OriginalL'auteur Ian Boyd
2 premiers liens de google
Comment: choisir un Encodage pour les ASP.NET Page Web de la Mondialisation:
http://msdn.microsoft.com/en-us/library/hy4kkhe0.aspx
la mondialisation de l'Élément (ASP.NET Schéma des Paramètres):
http://msdn.microsoft.com/en-us/library/hy4kkhe0.aspx
OriginalL'auteur Alex Reitbort