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

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

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

Ответы [ 3 ]

19 голосов
/ 02 апреля 2014

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

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

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

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

19 голосов
/ 23 июля 2011

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

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();
}
0 голосов
/ 05 января 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...