我有一个C#例程,它从CSV文件导入数据,将其与数据库匹配,然后将其重写为文件.源文件似乎有一些非ASCII字符,这些字符会污染处理程序.
我已经有一个静态方法,我运行每个输入字段,但它执行基本检查,如删除逗号和引号.有谁知道如何添加删除非ASCII字符的功能?
Jai*_*der 55
一个简单的解决方案:
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;
}
Run Code Online (Sandbox Code Playgroud)
来源:http://snipplr.com/view/35806/
ETo*_*reo 44
string sOut = Encoding.ASCII.GetString(Encoding.ASCII.GetBytes(s))
Run Code Online (Sandbox Code Playgroud)
pap*_*zzo 13
一劳永逸
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();
}
Run Code Online (Sandbox Code Playgroud)
如果你想测试一个特定的角色,你可以使用
if ((int)myChar <= 127)
Run Code Online (Sandbox Code Playgroud)
只是获取字符串的ASCII编码不会告诉您特定字符是非ASCII开头(如果您关心).请参阅MSDN.
这是对已接受答案的改进:
string fallbackStr = "";
Encoding enc = Encoding.GetEncoding(Encoding.ASCII.CodePage,
new EncoderReplacementFallback(fallbackStr),
new DecoderReplacementFallback(fallbackStr));
string cleanStr = enc.GetString(enc.GetBytes(inputStr));
Run Code Online (Sandbox Code Playgroud)
此方法将用的值替换未知字符fallbackStr,如果fallbackStr为空,则将其完全排除。(请注意,enc可以在函数范围之外定义。)