从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; }