如何从字符串中去除非ASCII字符? (在C#中)
时间:2020-03-06 14:37:21 来源:igfitidea点击:
如何从字符串中去除非ASCII字符? (在C#中)
解决方案
string s = "s?me string"; s = Regex.Replace(s, @"[^\u0000-\u007F]+", string.Empty);
这是一个不使用正则表达式的纯.NET解决方案:
string inputString = "R?ksm?rg?s"; string asAscii = Encoding.ASCII.GetString( Encoding.Convert( Encoding.UTF8, Encoding.GetEncoding( Encoding.ASCII.EncodingName, new EncoderReplacementFallback(string.Empty), new DecoderExceptionFallback() ), Encoding.UTF8.GetBytes(inputString) ) );
它可能看起来很麻烦,但是应该很直观。它使用.NET ASCII编码来转换字符串。转换期间使用UTF8,因为它可以表示任何原始字符。它使用EncoderReplacementFallback将任何非ASCII字符转换为空字符串。
受philcruz正则表达式解决方案的启发,我制作了一个纯LINQ解决方案
public static string PureAscii(this string source, char nil = ' ') { var min = '\u0000'; var max = '\u007F'; return source.Select(c => c < min ? nil : c > max ? nil : c).ToText(); } public static string ToText(this IEnumerable<char> source) { var buffer = new StringBuilder(); foreach (var c in source) buffer.Append(c); return buffer.ToString(); }
这是未经测试的代码。