如何从字符串中去除非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();
}
这是未经测试的代码。

