2012-03-02 8 views
1

次のコードを使用して、ログテーブルから.csvファイルを生成します。キリル文字のためのcsvファイルエンコーディング

public ActionResult Index() 
{ 
var records = loggingService.GetLogRecords(model.Since, model.For); 

var mainSb = new StringBuilder(); 
mainSb.Append("Date,User name\n"); 

foreach (var logRecord in records) 
{ 
    mainSb.Append(logRecord.Time.ToString("dd/MM/yyyy hh:mm:ss")).Append(","); 
    mainSb.Append("\"").Append(logRecord.UserName ?? "").Append("\"").Append(","); 
} 
return File(Encoding.Unicode.GetBytes(mainSb.ToString()), "text/csv", string.Format("logs.csv")); 
} 

ユーザ名は、キリル文字が含まれている、と私は私の.csvファイルを開くと - キリル文字を表示悪いです。私はUTF8とUTF32のエンコーディングも使用しようとしました。 Whanエンコーディングを使用するか、どのような変更を行う必要がありますか?

答えて

12

プリアンブル付きのUTF-8を使用できます。最後に、このようにしてみてください。

var data = Encoding.UTF8.GetBytes(mainSb.ToString()); 
var result = Encoding.UTF8.GetPreamble().Concat(data).ToArray(); 
return File(result, "text/csv", "logs.csv"); 

はまた、あなたがWindows上で正しい改行区切りではなく、あなたがあなたのforeachループで新しい行を追加していないようですので、すべては意志\nを使用しているように見えます同じ行にあるとCSVファイルが無効になります。してください、お願いします。do not roll your own CSV parser

+0

文字列をエンコードするには、文字 '、'、 '' 'をそれらから削除しても十分ですか?回答のヘルプにリンクして、(解析せずに).csvファイルを生成することができますか? –

+0

私はちょうどスカンジナビア人のキャラクターもうまく働かせるようにそれを使いました。 – MEMark

関連する問題