Comment ajouter de codage de l'information pour le flux de réponse dans ASP.NET?
J'ai des morceau de code suivant:
public void ProcessRequest (HttpContext context)
{
context.Response.ContentType = "text/rtf; charset=UTF-8";
context.Response.Charset = "UTF-8";
context.Response.ContentEncoding = System.Text.Encoding.UTF8;
context.Response.AddHeader("Content-disposition", "attachment;filename=lista_obecnosci.csv");
context.Response.Write("ąęćżźń󳥌ŻŹĆŃŁÓĘ");
}
Quand j'essaye d'ouvrir le fichier csv généré, j'obtiens le comportement suivant:
- Dans Notepad2 - tout va bien.
- Dans Word conversion de l'assistant s'ouvre et vous demande de convertir le texte. Il suggère UTF-8, qui est en quelque sorte ok.
- Dans Excel - je obtenir un réel gâchis. Aucun de ces polonais caractères peuvent être affichés.
J'ai voulu écrire ces encodage de l'information personnages en face de ma chaîne, c'est à dire
context.Response.Write((char)0xef);
context.Response.Write((char)0xbb);
context.Response.Write((char)0xbf);
mais qui ne fera pas bon. Le flux de réponse est le traitement normal des données et de les convertir en quelque chose de différent.
Je vous remercie de l'aide sur celui-ci.
OriginalL'auteur Greg | 2009-06-17
Vous devez vous connecter pour publier un commentaire.
Ce que vous appelez "l'encodage de l'information" est en fait une NOMENCLATURE. Je soupçonne que chacun de ces "personnages" est de se codées séparément. Pour écrire la NOMENCLATURE manuellement, vous devez l'écrire comme trois octets, pas trois caractères. Je ne suis pas familier avec le .NET I/O classes, mais il devrait y avoir une méthode disponible pour vous qui prend un octet ou byte[] paramètre et écrit directement dans le fichier.
Par la voie, l'UTF-8 BOM est facultative; en fait, son utilisation est déconseillée par le Consortium Unicode. Si vous n'avez pas de raison particulière pour qu'il l'aide, vous épargner les tracas et les laisser tomber.
EDIT: je viens de me rappeler que vous pouvez aussi écrire à la NOMENCLATURE réelle caractère,
'\uFEFF'
, et de laisser le codeur de la poignée:merci! sauvé beaucoup de temps pour moi!
OriginalL'auteur Alan Moore
J'ai rencontré le même problème et c'était ma solution:
ce qui est le plus utile de répondre, car chaque encodage et l'ordre des octets de système a une autre préambule et cela s'applique à d'autres encodages.
OriginalL'auteur Collin K
Je pense que le problème est avec Excel basé sur Microsoft Excel mangles les signes Diacritiques .les fichiers csv. Pour prouver ceci, copie de votre exemple de sortie de la chaîne de
ąęćżźń󳥌ŻŹĆŃŁÓĘ
et coller dans un fichier de test à l'aide de votre éditeur favori, et de les enregistrer en tant que UTF-8 .fichier csv. Ouvrir dans Excel et de voir les mêmes questions.OriginalL'auteur Kevin Hakanson
La réponse de Alan Moore
traduit de VB:
C'est pour s'assurer que ce qui est sur la gauche est traitée comme char et non pas comme une chaîne de caractères. Merci de voir stackoverflow.com/a/19522767/251674
OriginalL'auteur Manuel Alves