【问题标题】:Export to .csv File导出到 .csv 文件
【发布时间】:2012-12-12 13:03:31
【问题描述】:

我在将数据导出到 .csv 文件时遇到问题。我用了两种方法。

        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 文件,但文件编码错误,我只看到一些“哈希”

【问题讨论】:

  • 你确定你看到了一个哈希?你没有看到文件的十六进制版本吗?如果是这样,请尝试在其他文本编辑器中打开它(例如 notepad2)
  • 我确定,我用记事本++打开它..
  • 因此尝试将 BinaryWrite 更改为 Write,如 @Belogix 所述。但如果可能,不要使用 \r\n,而是使用 string.Format("Record1,Fred,23{0}", Environment.NewLine)
  • Response.Write 没有帮助。我不能写像“Record1,Fred,23\r\nRecord2,Bob,36\r\n”这样的字符串
  • 当你说你不能时,问题是什么?

标签: c# asp.net csv


【解决方案1】:

这是一个使用 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());
        }
    }
}

【讨论】:

  • 我可以做 Response.Write(s1);其中 s1 = "Record1,Fred,23\r\nRecord2,Bob,36\r\n";
猜你喜欢
  • 2014-02-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 2012-08-27
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多