Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP MVC 3-导出到CSV方法,包括数据库中未包含的垃圾字符_Asp.net Mvc_Asp.net Mvc 3_Asp.net Mvc 2_Csv_Export To Csv - Fatal编程技术网

Asp.net mvc ASP MVC 3-导出到CSV方法,包括数据库中未包含的垃圾字符

Asp.net mvc ASP MVC 3-导出到CSV方法,包括数据库中未包含的垃圾字符,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-2,csv,export-to-csv,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 2,Csv,Export To Csv,下面是我用来将表格内容导出为CSV的(粗略)方法。我是动态地想到这个的,但是表中的数据是从Sharepoint网站创建的Excel电子表格加载的。我不知道转换过程或我的方法是否是原因,但大量这些字符:正在导入单元格中 此外,大量记录的字段被分成两行,而不是一行。这是我第一次尝试以编程方式导出到CSV(而不是使用excel),因此任何帮助都将非常宝贵 控制器方法 public ActionResult ExportToCsv() { using (StringWri

下面是我用来将表格内容导出为CSV的(粗略)方法。我是动态地想到这个的,但是表中的数据是从Sharepoint网站创建的Excel电子表格加载的。我不知道转换过程或我的方法是否是原因,但大量这些字符:
正在导入单元格中

此外,大量记录的字段被分成两行,而不是一行。这是我第一次尝试以编程方式导出到CSV(而不是使用excel),因此任何帮助都将非常宝贵

控制器方法

    public ActionResult ExportToCsv()
    {
        using (StringWriter writer = new StringWriter())
        {
            var banks = db.BankListMaster.Include(b => b.BankListAgentId).ToList();

            writer.WriteLine("Bank Name, EPURL, AssociatedTPMBD, Tier, FixedLifeMasterSAF, VariableLifeMasterSAF, FixedLifeSNY, VariableLifeMasterSNY, SpecialNotes, WelcomeLetterReq, " +
                             "BackOfficeNotification, LinkRepsToDynamics, RelationshipCode, INDSGC, PENSGC, LicensingContract, MiscellaneousNotes, ContentTypeID1, CreatedBy, MANonresBizNY, Attachment");

            foreach (var item in banks)
            {
                writer.Write(item.BankName + ",");
                if(String.IsNullOrWhiteSpace(item.EPURL))
                {
                    writer.Write(item.EPURL + ",");
                }
                else
                {
                    writer.Write(item.EPURL.Trim() + ",");
                }
                writer.Write(item.AssociatedTPMBD + ",");
                writer.Write(item.Tier + ",");
                writer.Write(item.LicensingContract + ",");
                writer.Write(item.MiscellaneousNotes + ",");
                writer.Write(item.ContentTypeID1 + ",");
                writer.Write(item.CreatedBy + ",");
                writer.Write(item.MANonresBizNY + ",");
                writer.Write(item.Attachment);
                writer.Write(writer.NewLine);
            }

            return File(new System.Text.UTF8Encoding().GetBytes(writer.ToString().Replace("Â", "")), "text/csv", "BankList.csv");
        }
    }

CSV是一种指定不当的文件格式。有几件重要的事情没有具体说明:

  • 字段分隔符。即使它被称为“逗号分隔”,Excel有时也会使用分号(取决于您的区域设置!)
  • 编码(UTF-8、ISO-8859-1、ANSI/Windows-1252等)
  • 换行符的类型(CR、NL或CR NL)
  • 是否所有字段都必须用双引号引起来,或仅包含字段分隔符、行分隔符、空格等的字段
  • 是否从未加引号的字段中修剪空白
  • 是否允许在带引号的字段中使用换行符(Excel允许)
  • 如果双引号是字段内容的一部分,则如何转义双引号(通常是双引号)
Excel通常是有效CSV格式的参考。但是,即使是Excel也会根据您的区域设置选择字段分隔符和编码

在您的情况下,编码很可能是主要问题。您使用UTF-8,但消费者将其视为ISO-8859-1或ANSI。因此,字符
经常出现,其二进制代码在UTF-8中用于引入双字节序列。更改编码以修复


作为下一步,请正确引用文本字段,即在开始和结束处添加双引号,并在字段中添加双引号。

CSV是一种指定不当的文件格式。有几件重要的事情没有具体说明:

  • 字段分隔符。即使它被称为“逗号分隔”,Excel有时也会使用分号(取决于您的区域设置!)
  • 编码(UTF-8、ISO-8859-1、ANSI/Windows-1252等)
  • 换行符的类型(CR、NL或CR NL)
  • 是否所有字段都必须用双引号引起来,或仅包含字段分隔符、行分隔符、空格等的字段
  • 是否从未加引号的字段中修剪空白
  • 是否允许在带引号的字段中使用换行符(Excel允许)
  • 如果双引号是字段内容的一部分,则如何转义双引号(通常是双引号)
Excel通常是有效CSV格式的参考。但是,即使是Excel也会根据您的区域设置选择字段分隔符和编码

在您的情况下,编码很可能是主要问题。您使用UTF-8,但消费者将其视为ISO-8859-1或ANSI。因此,字符
经常出现,其二进制代码在UTF-8中用于引入双字节序列。更改编码以修复


作为下一步,请正确引用文本字段,即在开始和结束处添加双引号,并在字段内添加所有双引号。

对于这两行,我怀疑杂项注释字段可能包含回车符/换行符。Try item.Miscellaneous.TrimEnd(新字符[]{'\r','\n'});至于这两行,我怀疑Miscellaneous Notes字段可能包含回车符/换行符。Try item.Miscellaneous.TrimEnd(新字符[]{'\r','\n'});