Удаление управляющих символов из строки UTF-8

Я нашел этот вопрос, но он также удаляет все допустимые символы utf-8 (возвращает мне пустую строку, в то время как есть допустимые символы utf-8 плюс управляющие символы), Когда я читал о utf-8, для control characters не существует определенного диапазона, и каждый набор символов имеет свой собственный control characters.

Как я могу изменить выше решение только удалить control characters?

Ответ 1

Я думаю, что для вас будет работать следующий код:

public static string RemoveControlCharacters(string inString)
{
    if (inString == null) return null;
    StringBuilder newString = new StringBuilder();
    char ch;
    for (int i = 0; i < inString.Length; i++)
    {
        ch = inString[i];
        if (!char.IsControl(ch))
        {
            newString.Append(ch);
        }
    }
    return newString.ToString();
}

Ответ 2

Вот как я рулон:

Regex.Replace(evilWeirdoText, @"[\u0000-\u001F]", string.Empty)

Это отображает все первые 31 управляющие символы. Следующее значение шестнадцатеричного значения от \u001F - это пространство. Все, что есть перед пространством, - это вся строка и нулевая глупость.

Поверить мне в символы: http://donsnotes.com/tech/charsets/ascii.html

Ответ 3

Если вы планируете использовать строку в качестве строки запроса, вам следует рассмотреть возможность использования Uri.EscapeUriString() или Uri.EscapeDataString() перед ее отправкой. Примечание. Вам все равно может понадобиться вытащить что-нибудь из char.IsControl() первым?