从UTF-8字符串中删除控制字符

时间:2011-07-23 09:52:52

标签: c# string utf-8 control-characters

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

如何修改above解决方案,只删除control characters

3 个答案:

答案 0 :(得分:18)

我认为以下代码适合您:

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

答案 1 :(得分:18)

这是我滚动的方式:

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

这将删除所有前31个控制字符。来自\ u001F的下一个十六进制值是\ u0020这个空间。空间之前的所有东西都是换行和无效的。

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

答案 2 :(得分:0)

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