【问题标题】:How to transform DataTable to CSV without Encoding Problem如何在没有编码问题的情况下将 DataTable 转换为 CSV
【发布时间】:2020-02-06 00:04:07
【问题描述】:

我有一个关于将 DataTable 转换为 CSV 文件的代码。没有问题。但是当我查看 CSV 文件时,一些土耳其字符 (ISO-8859-9) 似乎是错误的。我必须解决编码问题;

StringBuilder sb = new StringBuilder();

        IEnumerable<string> columnNames = dt.Columns.Cast<DataColumn>().
                                          Select(column => column.ColumnName);
        sb.AppendLine(string.Join(",", columnNames));

        foreach (DataRow row in dt.Rows)
        {
            IEnumerable<string> fields = row.ItemArray.Select(field =>
              string.Concat("\"", field.ToString().Replace("\"", "\"\""), "\""));
            sb.AppendLine(string.Join(",", fields));
        }

        File.WriteAllText("Gecisler" + Tarih + ".csv", sb.ToString());

【问题讨论】:

标签: c# csv datatable ado.net export-to-csv


【解决方案1】:

我建议使用Pnyx 库,而不是“滚动”您自己的 CSV 编写器。它可以优雅地处理文件编码、Unix/windows 换行符和符合RFC 4180 的 CSV 格式。

这是一个使用其流畅 API 的示例(将 some_xxx 替换为实际值):

        string Tarih = "some_value";
        DataTable dt = some_data();

        using (Pnyx p = new Pnyx())
        {
            p.setSettings(outputEncoding: Encoding.GetEncoding(some_encoding()));
            p.readRowFunc(
                source: () => dt.Rows.Cast<DataRow>().Select(dataRow => dataRow.ItemArray.Select(obj => obj.ToString()).ToList()),
                header: () => dt.Columns.Cast<DataColumn>().Select(column => column.ColumnName).ToList()
            );
            p.writeCsv("Gecisler" + Tarih + ".csv");
        }

完全披露:我是图书馆的贡献者。

【讨论】:

    猜你喜欢
    • 2017-05-20
    • 2012-11-21
    • 1970-01-01
    • 2011-12-07
    • 2019-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多