2009-02-03 6 views
2

Comment avez-vous obtenu ASP.NET pour produire du texte codé en UTF-16?Comment avez-vous obtenu ASP.NET pour produire du texte codé en UTF-16?

Je sérialise un objet dans .NET qui est par défaut le format UTF-16. Maintenant, je veux envoyer la chaîne comme une réponse de sortie à une demande .ashx.

Je reçois l'erreur: Passer du codage actuel au codage spécifié non pris en charge. Erreur lors du traitement de la ressource

Comment indiquer à mon site Web ou page d'utiliser le format UTF-16.

Merci.

Mise à jour: lire les deux réponses.

+0

Quelle est la ligne exacte qui lève l'exception? S'il vous plaît, éditez la question. –

+0

L'analyseur XML dans Internet Explorer renvoyait l'erreur en raison du format d'encodage. Donc, je pense que techniquement, il se brisait sur les tout premiers caractères de la sortie. Voir mon 4ème ou 5ème commentaire sur la réponse acceptée pour ce que je devais faire pour l'obtenir Xml Serialized à UTF-8 – BuddyJoe

Répondre

3

En général: non.

Les pages Web comme UTF-16 confondent de nombreux outils et font que les navigateurs se comportent de façon inattendue. (Esp .: scripts liés, soumissions de formulaires, procurations). UTF-16 ne peut être servi en tant qu'objet binaire, donc pour le contenu web s'en tenir à un encodage qui est un sur-ensemble d'ASCII - le choix évident étant UTF-8.

L'erreur que vous avez citée est généralement ce que vous obtenez lorsque vous essayez de lire un fichier XML dont <? Xml encoding = "..."?> Prologue entre en conflit avec le codage réel du fichier. Aucun des codages de surensemble d'ASCII ne se contracte parce que le codage xml est ASCII et représente la même chose dans chacun d'entre eux, mais si vous avez mis encoding = "utf-16" dans un fichier XML qui n'est pas enregistré comme UTF- 16, ou vous avez pas le mettre quand est, alors l'analyseur ne peut pas faire face à l'impossibilité logique.

+0

En fait, j'utilise la méthode d'extension ToXml d'ici: http://solidcoding.blogspot.com/2007/11 /c-toxml-extension-method.html. Depuis System.String est stocké en interne comme UTF-16 où est mon problème. Je vais devoir utiliser une méthode ToXml plus longue qui comptabilise 4 ceci et convertit en UTF-8 – BuddyJoe

+0

Peut-être que XmlSerializer.Serialize (Stream, Object) sur un flux d'octets, plutôt que (TextWriter, Object) est ce qui est requis? – bobince

+0

@bobince, c'est ce que montrent les exemples que j'ai vus en ligne. Oh bien, quelques lignes de code supplémentaires. c'est tout. – BuddyJoe

0

Ce qui suit a fonctionné pour moi:

Dim utf16 = New UnicodeEncoding(False, True) 
Response.BinaryWrite(utf16.GetPreamble) 
Response.ContentEncoding = utf16 

Soit dit en passant, je devais faire cela parce que j'envoyais une table html contenant des caractères unicode à Excel. (Je sais, pas la meilleure façon de créer un fichier Excel!)

Excel (et LibreOffice Calc) attend utf-16 et ne fonctionne pas avec utf-8. Excel a également besoin de la nomenclature UTF16 au début, d'où l'appel à GetPreamble.

Questions connexes