简体   繁体   English

如何在没有编码问题的情况下将 DataTable 转换为 CSV

[英]How to transform DataTable to CSV without Encoding Problem

I have a code about which transforms DataTable to CSV file.我有一个关于将 DataTable 转换为 CSV 文件的代码。 There is no problem about it.没有问题。 But when i look to CSV file some Turkish Characters (ISO-8859-9) seems wrong.但是当我查看 CSV 文件时,一些土耳其字符(ISO-8859-9)似乎是错误的。 I have to solve encoding problem;我必须解决编码问题;

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());

Instead of "rolling" your own CSV writer, I recommend using Pnyx library.我建议使用Pnyx库,而不是“滚动”您自己的 CSV 编写器。 It gracefully handles file encoding, Unix/windows newlines, and RFC 4180 compliant CSV formatting.它优雅地处理文件编码、Unix/windows 换行符和符合RFC 4180的 CSV 格式。

Here is an example using its fluent API (replace some_xxx with actual values):这是一个使用其流利的 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");
        }

Full disclosure: I am a contributor to the library.完全披露:我是图书馆的贡献者。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM