如何从字符串中删除非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字符转换为空字符串.
我相信MonsCamus意味着:
parsememo = Regex.Replace(parsememo, @"[^\u0020-\u007E]", string.Empty);
如果你不想剥离,但实际上将拉丁语重音转换为非重音字符,请看一下这个问题:如何将8位字符转换为7位字符?(即Ü到U)
受philcruz的Regular Expression解决方案的启发,我制作了纯粹的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 IEnumerablesource) { var buffer = new StringBuilder(); foreach (var c in source) buffer.Append(c); return buffer.ToString(); }
这是未经测试的代码.
不需要正则表达式.只是使用编码...
sOutput = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.ASCII.GetBytes(sInput));