如何删除 CsvHelper 中的非 ASCII 字符

How to remove non-ascii characters in CsvHelper

有没有办法通过 CsvHelper 中的配置删除非 ascii 字符,而不是在应用程序代码中编写转换?

我将 Excel 保存到 CSV 并找到了一些值,例如 AbsMarketValue�������������,我想去掉非 ASCII 字符。

csv.Configuration.Encoding = Encoding.ASCII 无效。

参照How can you strip non-ASCII characters from a string? (in C#)

string s = "søme string";
s = Regex.Replace(s, @"[^\u0000-\u007F]+", string.Empty);

上述方法对我有用,但我想避免这种情况,因为这需要我在应用程序中为任何文本字段添加此类代码。

我尝试在转换映射中执行此操作,但没有成功。

使用类型转换器,您可以让所有字符串属性只输出 ASCII 字符。

void Main()
{
    using (var reader = new StringReader("Id,Name\n1,AbsMarketValue�������������"))
    using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
    {
        csv.Context.TypeConverterCache.AddConverter<string>(new AsciiOnlyConverter());
        
        var records = csv.GetRecords<Foo>();
    }
}

public class Foo
{
    public int Id { get; set; }
    public string Name { get; set; }
}


public class AsciiOnlyConverter : StringConverter
{
    public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
    {
        var ascii = Regex.Replace(text, @"[^\u0000-\u007F]+", string.Empty);
        
        return base.ConvertFromString(ascii, row, memberMapData);
    }
}