【问题标题】:How to remove non-ascii characters in CsvHelper如何在 CsvHelper 中删除非 ASCII 字符
【发布时间】:2021-12-27 18:16:40
【问题描述】:

有没有办法通过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);

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

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

【问题讨论】:

    标签: csvhelper


    【解决方案1】:

    使用类型转换器,您可以让所有字符串属性只输出 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);
        }
    }
    

    【讨论】:

    • 非常感谢@David Specht
    猜你喜欢
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多