J'ai essayé cette approche sans succès
le code que j'utilise:
// File name
String filename = String.Format("{0:ddMMyyHHmm}", dtFileCreated);
String filePath = Path.Combine(Server.MapPath("App_Data"), filename + ".txt");
// Process
myObject pbs = new myObject();
pbs.GenerateFile();
// pbs.GeneratedFile is a StringBuilder object
// Save file
Encoding utf8WithoutBom = new UTF8Encoding(true);
TextWriter tw = new StreamWriter(filePath, false, utf8WithoutBom);
foreach (string s in pbs.GeneratedFile.ToArray())
tw.WriteLine(s);
tw.Close();
// Push Generated File into Client
Response.Clear();
Response.ContentType = "application/vnd.text";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + ".txt");
Response.TransmitFile(filePath);
Response.End();
le résultat:
C'est écriture de la nomenclature quoi qu'il arrive, et les caractères spéciaux (comme Æ Ø Å) ne sont pas corrects: - /
Je suis coincé!
Mon objectif est de créer un fichier en utilisant UTF-8 comme encodage et 8859-1 comme CharSet
Est-ce si difficile à réaliser ou je passe juste une mauvaise journée?
Toute aide est grandement appréciée, merci !
Eh bien, il écrit la nomenclature parce que vous lui demandez, dans la ligne
Encoding utf8WithoutBom = new UTF8Encoding(true);
true
signifie que la nomenclature doit être émise, en utilisant
Encoding utf8WithoutBom = new UTF8Encoding(false);
n'écrit aucune nomenclature.
Mon objectif est de créer un fichier en utilisant UTF-8 comme encodage et 8859-1 comme CharSet
Malheureusement, ce n'est pas possible, que vous écriviez UTF-8 ou non. C'est à dire. tant que les caractères que vous écrivez sont présents dans ISO Latin-1, cela ressemblera à un fichier ISO 8859-1, mais dès que vous produisez un caractère qui n'est pas couvert par ISO 8859-1 (par exemple ä, ö, ü ) ces caractères seront écrits comme un caractère multi-octets.
Pour écrire une véritable ISO-8859-1, utilisez:
Encoding isoLatin1Encoding = Encoding.GetEncoding("ISO-8859-1");
Edit: Après le commentaire de balexandre
J'ai utilisé le code suivant pour tester ...
var filePath = @"c:\temp\test.txt";
var sb = new StringBuilder();
sb.Append("dsfaskd jlsadfj laskjdflasjdf asdkfjalksjdf lkjdsfljas dddd jflasjdflkjasdlfkjasldfl asääääjdflkaslj d f");
Encoding isoLatin1Encoding = Encoding.GetEncoding("ISO-8859-1");
TextWriter tw = new StreamWriter(filePath, false, isoLatin1Encoding);
tw.WriteLine(sb.ToString());
tw.Close();
Et le fichier semble parfaitement bien. Évidemment, vous devez utiliser le même encodage lors de la lecture du fichier.