从 URI 更改 CSV 编码

Change CSV encoding from URI

我正在尝试下载 CSV 文件并解析其字段,我正在使用 CSVHelper 库 (https://joshclose.github.io/CsvHelper)。 我认为我面临的问题与编码有关,因为当我 read/print 代码中的文件内容时,CsvHelper 库找不到相关的 headers/fields。我用 word 导入文件,UTF8 似乎是正确的编码,以便正确显示 CSV 内容。但是,我的代码和 excel 没有正确显示 headers(或任何捷克语字符)。这是我如何获得 excel:

var teamResultCsvUrl = new Uri("https://blabla/csv/4072");

这是我想做的事情:

        // total results for teams
        using (response = await client.GetAsync(teamResultCsvUrl))
        {
            using (Stream stream = await response.Content.ReadAsStreamAsync())
            {
                using (StreamReader streamReader = new StreamReader(stream))
                using (CsvHelper.CsvReader csvReader = new CsvHelper.CsvReader(streamReader, CultureInfo.InvariantCulture))
                {
                    teamCsvResults = csvReader.GetRecords<ValidationClass>().ToList();
                }
            }
            }

我遇到以下异常:

System.AggregateException: One or more errors occurred.
CsvHelper.HeaderValidationException: Header with name '<SOME HEADER>' was not found. If you are expecting some headers to be missing and want to ignore this validation, set the configuration HeaderValidated to null. You can also change the functionality to do something else, like logging the issue.
at CsvHelper.Configuration.ConfigurationFunctions.HeaderValidated(Boolean isValid, String[] headerNames, Int32 headerNameIndex, ReadingContext context)
at CsvHelper.CsvReader.ValidateHeader(ClassMap map)
at CsvHelper.CsvReader.ValidateHeader(Type type)
at CsvHelper.CsvReader.ValidateHeader[T]()
at CsvHelper.CsvReader.<GetRecords>d__63`1.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
.......

另外,当我打印文件内容时,字符编码不正确。 How/where 我可以为下载的文件设置编码吗?我的方法还有什么地方看起来不对吗?

谢谢!

CsvHelper 不控制用于读取数据的编码。您可以指定在创建 StreamReader.

时使用的编码
using (StreamReader streamReader = new StreamReader(stream, Encoding.UTF8))

如果 Encoding.UTF8 不起作用,您可能需要弄清楚正确的编码是什么。