15

我发现了这个问题,但它也删除了所有有效utf-8字符(返回一个空白字符串,而有有效utf-8字符加上控制字符)。正如我所读到utf-8的,没有特定的范围control characters,每个字符集都有自己的control characters.

如何修改上述解决方案以仅删除control characters

4

3 回答 3

23

这是我的风格:

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

这会去掉所有前 31 个控制字符。从 \u001F 开始的下一个十六进制值是 \u0020 AKA 空格。空格之前的所有内容都是换行符和无意义的废话。

相信我的角色:http ://donsnotes.com/tech/charsets/ascii.html

于 2014-04-02T07:12:40.043 回答
22

我认为以下代码对您有用:

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();
}
于 2011-07-23T10:03:12.850 回答
0

如果您打算将该字符串用作查询字符串,则应考虑在发送之前使用Uri.EscapeUriString()or 。Uri.EscapeDataString()注意:您可能仍需要先从 char.IsControl() 中提取任何内容?

于 2013-01-04T22:17:06.363 回答