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

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

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

3 ответа

Решение

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

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

Вот как я катаюсь:

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

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

Поверить мне на персонажей: http://donsnotes.com/tech/charsets/ascii.html

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

Другие вопросы по тегам