如何删除 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);
}
}
有没有办法通过 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);
}
}