从字符串中删除所有非ASCII字符

时间:2009-10-05 23:18:28

标签: c# ascii

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

我已经有一个静态方法,我运行每个输入字段,但它执行基本检查,如删除逗号和引号。有人知道如何添加删除非ASCII字符的功能吗?

7 个答案:

答案 0 :(得分:54)

这是一个简单的解决方案:

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/

答案 1 :(得分:43)

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

答案 2 :(得分:11)

立刻完成所有工作

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();
}

答案 3 :(得分:8)

如果您想测试特定字符,可以使用

if ((int)myChar <= 127)

只是获取字符串的ASCII编码不会告诉您特定字符是非ASCII开头(如果您关心的话)。请参阅MSDN

答案 4 :(得分:4)

这是对已接受答案的改进:

string fallbackStr = "";

Encoding enc = Encoding.GetEncoding(Encoding.ASCII.CodePage,
  new EncoderReplacementFallback(fallbackStr),
  new DecoderReplacementFallback(fallbackStr));

string cleanStr = enc.GetString(enc.GetBytes(inputStr));

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

答案 5 :(得分:2)

删除非ASCII是可以接受的。

另外,我总是建议使用优秀的FileHelpers库来解析CSV文件。

答案 6 :(得分:0)

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