我发现了this个问题,但它也删除了所有有效的utf-8
字符(返回一个空字符串,而有效utf-8
字符加上控制字符)。在我阅读utf-8
时,control characters
没有特定的范围,每个字符集都有自己的control characters
。
如何修改above解决方案,只删除control characters
?
答案 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这个空间。空间之前的所有东西都是换行和无效的。
答案 2 :(得分:0)
如果您打算将字符串用作查询字符串,则应在发送之前考虑使用Uri.EscapeUriString()
或Uri.EscapeDataString()
。
注意:您可能仍需要首先从char.IsControl()中提取任何内容吗?