使用CSVHelper读取ANSI编码CSV文件时英镑符号显示异常
解决CSVHelper读取英镑符号显示菱形问号的问题
核心问题是文件编码识别错误,自动检测编码的方式有时会失效,尤其是针对带特殊符号的旧编码文件(比如Windows-1252,很多含英镑符号的CSV采用这个编码)。直接指定正确编码即可解决:
修正后的代码
var csvConfig = new CsvConfiguration(new CultureInfo("en-GB")) { ShouldSkipRecord = (row) => row.Row.Parser.Row <= 4 }; // 直接指定Windows-1252编码(若无效可尝试ISO-8859-1) using var streamReader = new StreamReader(_fileName, Encoding.GetEncoding(1252)); using var csvReader = new CsvReader(streamReader, csvConfig); var records = csvReader.GetRecords<WebApi.Entities.Csv.Transaction>(); foreach (var record in records) { System.Diagnostics.Debug.WriteLine(record.PaidIn); }
额外排查建议
- 确认
Transaction类的PaidIn字段类型:如果是数值类型,CSVHelper会自动剥离货币符号,建议先改为string类型验证符号是否被正确读取,再按需做数值转换 - 验证输出载体的编码:Debug输出窗口可能因编码不兼容显示问号,可将读取到的内容写入UTF-8编码的文件,确认符号是否正常保存
内容的提问来源于stack exchange,提问作者Musaffar Patel
相关产品推荐
相关产品推荐

