this aproach 試みましたが成功しませんでした
私が使用しているコード:
// 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();
結果:
BOMの記述 何であれ、特殊文字(ÆØÅなど)は正しくありません:-/
私は立ち往生しています!
私の目的は、エンコーディングとしてUTF-8と8859-1CharSetとして
これを達成するのはとても難しいですか、それとも私はちょうど悪い一日を過ごしていますか?
すべてのヘルプは大歓迎です、ありがとう!
あなたはそれを指示しているので、それはBOMを書いています
Encoding utf8WithoutBom = new UTF8Encoding(true);
true
は、次を使用してBOMを発行することを意味します
Encoding utf8WithoutBom = new UTF8Encoding(false);
bOMを書き込みません。
私の目的は、エンコードとしてUTF-8を使用し、CharSetとして8859-1を使用してファイルを作成することです
残念ながら、これは不可能です。UTF-8を作成するかしないかです。つまり書いている文字がISO Latin-1にある限り、ISO 8859-1ファイルのように見えますが、ISO 8859-1でカバーされていない文字を出力するとすぐに(例えば、ä、ö、ü )これらの文字はマルチバイト文字として書き込まれます。
真のISO-8859-1を作成するには、次を使用します。
Encoding isoLatin1Encoding = Encoding.GetEncoding("ISO-8859-1");
編集: balexandreのコメントの後
次のコードをテストに使用しました...
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();
そして、ファイルは完璧に見えます。明らかに、ファイルの読み取り時に同じエンコードを使用する必要があります。