[英]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.