70

私は成功せずにこのアプローチを試みました

私が使用しているコード:

// 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、CharSetとして8859-1を使用してファイルを作成することです

これを達成するのはとても難しいですか、それとも私はただ悪い日を迎えているだけですか?

すべてのヘルプは大歓迎です、ありがとう!

4

1 に答える 1

171

あなたが指示しているので、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();

そして、ファイルは完全によく見えます。明らかに、ファイルを読み取るときに同じエンコーディングを使用する必要があります

于 2010-03-23T19:41:31.523 に答える