Удалить все не-ASCII символы из строки - PullRequest
42 голосов
/ 06 октября 2009

У меня есть подпрограмма C #, которая импортирует данные из файла CSV, сопоставляет их с базой данных и затем перезаписывает их в файл. Кажется, что в исходном файле есть несколько не-ASCII-символов, которые заполняют процедуру обработки.

У меня уже есть статический метод, через который я запускаю каждое поле ввода, но он выполняет базовые проверки, такие как удаление запятых и кавычек. Кто-нибудь знает, как я мог бы добавить функциональность, которая также удаляет не-ASCII символы?

Ответы [ 7 ]

54 голосов
/ 03 января 2013

Вот простое решение:

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/

43 голосов
/ 06 октября 2009
string sOut = Encoding.ASCII.GetString(Encoding.ASCII.GetBytes(s))
11 голосов
/ 01 августа 2016

Сделай все сразу

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();
}
8 голосов
/ 06 октября 2009

Если вы хотите проверить определенный символ, вы можете использовать

if ((int)myChar <= 127)

Простое получение ASCII-кодировки строки не скажет вам, что конкретный символ был не-ASCII для начала (если вас это волнует) См. MSDN .

4 голосов
/ 26 августа 2016

Вот улучшение по принятому ответу:

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 может быть определено вне области действия функции.)

2 голосов
/ 06 октября 2009

Звучит странно, что принято отбрасывать не-ASCII.

Также я всегда рекомендую отличную библиотеку FileHelpers для анализа CSV-файлов.

0 голосов
/ 08 июня 2016
    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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...