【发布时间】:2020-08-18 06:14:49
【问题描述】:
我正在编写一份报告,以便将数据从表格移动到 CSV 格式的报告中。
下面是我的 SQL Server 数据库,其列值如下,使用非英语字符,例如 ü、ç、é。我提供了生成的 CSV 输出。我正在使用的代码也粘贴在下面。第一张图片是数据库数据。第二张图片是 Excel 报告数据。
我写了下面的代码。
public static byte[] GetMemoryStream<T>(List<T> data) where T : class
{
Logger.Debug("Inside GetMemoryStream(), step 7");
using (var mem = new MemoryStream())
using (var writer = new StreamWriter(mem))
using (var csvWriter = new CsvWriter(writer, System.Threading.Thread.CurrentThread.CurrentCulture)) // System.Threading.Thread.CurrentThread.CurrentCulture
{
var options = new TypeConverterOptions { Formats = new[] { "yyyy/MM/dd HH:mm:ss" } };
csvWriter.Configuration.TypeConverterOptionsCache.AddOptions<DateTime>(options);
csvWriter.Configuration.Delimiter = ",";
csvWriter.WriteHeader<T>();
csvWriter.NextRecord();
csvWriter.WriteRecords(data);
writer.Flush();
var result = Encoding.Unicode.GetString(mem.ToArray());
//Console.WriteLine(result);
return Encoding.Unicode.GetBytes(result);
// return mem.ToArray();
}
【问题讨论】:
-
您需要告诉我们列的数据类型,以及您的数据库的排序规则(或者列,如果单独排序)。
-
您的代码似乎假设
StreamWriter将使用Encoding.Unicode编写。它默认使用Encoding.UTF8。但更大的问题是:为什么当mem.ToArray()返回一个字节数组时,您是否将其转换为字符串(使用错误的编码)并返回字节?您是否尝试转换使用的编码系统?为什么不直接将Encoding.Unicode传递给StreamWriter构造函数? -
@DaleK 我认为这是一条红鲱鱼。
标签: c# .net sql-server