从string中删除所有非ASCII字符

我有一个C#例程,从CSV文件导入数据,将其与数据库匹配,然后将其重写为文件。 源文件似乎有一些非ASCII字符是污染处理例程。

我已经有一个静态方法,我运行每个input字段,但它执行基本检查,如删除逗号和引号。 有谁知道我可以添加删除非ASCII字符的function吗?

string sOut = Encoding.ASCII.GetString(Encoding.ASCII.GetBytes(s)) 

这里简单的解决scheme

 public static bool IsASCII(this string value) { // ASCII encoding replaces non-ascii with question marks, so we use UTF8 to see if multi-byte sequences are there return Encoding.UTF8.GetByteCount(value) == value.Length; } 

来源: http : //snipplr.com/view/35806/

如果你想testing一个特定的angular色,你可以使用

 if ((int)myChar <= 127) 

只是获得string的ASCII编码不会告诉你,一个特定的字符是非ASCII开始(如果你在乎)。 请参阅MSDN 。

一次做完这一切

 public string ReturnCleanASCII(string s) { StringBuilder sb = new StringBuilder(s.Length); foreach(char c in s) { if((int)c > 127) // you probably don't want 127 either continue; if((int)c < 32) // I bet you don't want control characters continue; if(c == ',') continue; if(c == '"') continue; sb.Append(c); } return sb.ToString(); } 

这听起来有点奇怪,它是接受放弃非ASCII。

此外,我总是build议优秀的FileHelpers库parsingCSV文件。

以下是接受的答案的改进:

 string fallbackStr = ""; Encoding enc = Encoding.GetEncoding(Encoding.ASCII.CodePage, new EncoderReplacementFallback(fallbackStr), new DecoderReplacementFallback(fallbackStr)); string cleanStr = enc.GetString(enc.GetBytes(inputStr)); 

此方法将使用fallbackStr的值replace未知字符,或者如果fallbackStr为空,则将其全部保留。 (请注意, enc可以在函数范围之外定义)。

  public string RunCharacterCheckASCII(string s) { string str = s; bool is_find = false; char ch; int ich = 0; try { char[] schar = str.ToCharArray(); for (int i = 0; i < schar.Length; i++) { ch = schar[i]; ich = (int)ch; if (ich > 127) // not ascii or extended ascii { is_find = true; schar[i] = '?'; } } if (is_find) str = new string(schar); } catch (Exception ex) { } return str; }