3

.csv ファイルへのデータのエクスポートに問題がありました。私は2つの方法を使用します。

        Encoding csvEncoding = new UTF8SignatureEncoding();
        byte[] csvFile = TestByte(CsvContentDelimiter.NewLine, CsvContentDelimiter.Semicolon, csvEncoding);


        string attachment = String.Format("attachment; filename={0}.csv", "docs_inv");

        Response.Clear();
        Response.ClearHeaders();
        Response.ClearContent();
        Response.ContentType = "text/csv";
        Response.ContentEncoding = csvEncoding;
        Response.AppendHeader("Content-Disposition", attachment);
        Response.BinaryWrite(csvFile);
        Response.Flush();
        Response.End();

    public byte[] TestByte(CsvContentDelimiter rowDelimiter, CsvContentDelimiter columnDelimiter, Encoding encoding)
    {
        StringBuilder sb = new StringBuilder();
        sb.Append("product;");
        return encoding.GetBytes(sb.ToString());
    }

このコードは .csv ファイルを作成しますが、ファイルのエンコーディングが正しくなく、一部の「ハッシュ」しか表示されません

4

1 に答える 1

2

これは、UTF8フォーマットを使用した完全に機能する例です。それはあなた自身のコードを使用するので、問題を引き起こしているのはあなたのエンコーディングであることを示しています:

namespace WebApplication1
{
    using System;
    using System.Text;

    public partial class _Default : System.Web.UI.Page
    {
        protected void btnExport_Click(object sender, EventArgs e)
        {
            // Use UTF8 encoding
            Encoding csvEncoding = Encoding.UTF8;
            byte[] csvFile = TestByte(csvEncoding);

            string attachment = String.Format("attachment; filename={0}.csv", "docs_inv");

            Response.Clear();
            Response.ClearHeaders();
            Response.ClearContent();
            Response.ContentType = "text/csv";
            Response.ContentEncoding = csvEncoding;
            Response.AppendHeader("Content-Disposition", attachment);
            Response.BinaryWrite(csvFile);
            Response.Flush();
            Response.End();
        }

        public byte[] TestByte(Encoding encoding)
        {
            StringBuilder sb = new StringBuilder();
            sb.AppendFormat("Record1,Fred,Bloggs,26{0}", Environment.NewLine);
            sb.AppendFormat("Record2,John,Smith,32{0}", Environment.NewLine);
            return encoding.GetBytes(sb.ToString());
        }
    }
}
于 2012-12-12T13:08:31.530 に答える