web-dev-qa-db-fra.com

Créer un fichier texte sans nomenclature

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:

enter image description here

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 !

48
balexandre

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.

117
AxelEckenberger