问题描述
public async Task<IActionResult> DownloadCSVResults([FromBody] ProfilesSearchOptions searchOptions)
{
var report = await profileManager.GetRep(searchOptions);
if (report == null)
{
return NotFound();
}
var result = Encoding.UTF8.GetPreamble().Concat(report.Body).ToArray();
return File(result,"text/csv",$"UserProfiles.{DateTime.Now:yyyy.MM.dd.HH.mm.ss}.csv");
}
public async Task<Report> GetRep(ProfilesSearchOptions searchOptions)
{
if (searchOptions == null)
{
return null;
}
var searchResult = await SearchProfiles(tenantDomain,false,searchOptions);
if (searchResult == null)
{
return null;
}
var report = GenerateReportRecord("Trainee");
var fileAsBytes = CsvService.GetCSVAsBytesWithHeaders(searchResult.UsersProfiles.Select(m => new UserProfileviewmodel
{
Id = m.Id,FirstNameAr = m.FirstNameAr,FatherNameAr = m.FatherNameAr,FamilyNameAr = m.FamilyNameAr,FullNameAr = m.FullNameAr,Email = m.Tenants?.Select(t => t.Email).Aggregate((t1,t2) => t1 + "," + t2),Deleted = m.Deleted.HasValue && m.Deleted.Value ? "Yes" : "No",}));
report.Body = fileAsBytes;
report.Status = ReportStatus.Success;
return report;
}
public static byte[] GetCSVAsBytesWithHeaders<T>(IEnumerable<T> data)
{
using (var memory = new MemoryStream())
using (var writer = new StreamWriter(memory,new UTF8Encoding(true)))
using (var csvWriter = new CsvWriter(writer))
{
csvWriter.Configuration.RegisterClassMap<AutoClassMapWithApplydisplayNameAttribute<T>>();
csvWriter.WriteRecords<T>(data);
writer.Flush();
var result = memory.ToArray();
return result;
}
}
private Report GenerateReportRecord(string reportTitle,string reportName)
{
return new Report
{
Id = Guid.NewGuid().ToString(),ReportTitle = $"{reportTitle}.{DateTime.Now:yyyy.MM.dd.HH.mm.ss}",Status = ReportStatus.InProgress
};
}
这些是我使用的三个主要功能,我使用 CSV 文件创建但使用 UTF-8 编码,但正如我提到的,我需要它是 UTF-8-BOM ......有什么帮助吗?并提前致谢... 问题出在我的 csv 文件中,一些字符显示为这样 => " الاسÙ... الاول "
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)