web-dev-qa-db-ja.com

BOMなしのテキストファイルの作成

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();

結果:

enter image description here

BOMの記述 何であれ、特殊文字(ÆØÅなど)は正しくありません:-/

私は立ち往生しています!

私の目的は、エンコーディングとしてUTF-88859-1CharSetとして

これを達成するのはとても難しいですか、それとも私はちょうど悪い一日を過ごしていますか?

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

48
balexandre

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

そして、ファイルは完璧に見えます。明らかに、ファイルの読み取り時に同じエンコードを使用する必要があります

117
AxelEckenberger