我发现了这个问题,但它也删除了所有有效utf-8
字符(返回一个空白字符串,而有有效utf-8
字符加上控制字符)。正如我所读到utf-8
的,没有特定的范围control characters
,每个字符集都有自己的control characters
.
如何修改上述解决方案以仅删除control characters
?
这是我的风格:
Regex.Replace(evilWeirdoText, @"[\u0000-\u001F]", string.Empty)
这会去掉所有前 31 个控制字符。从 \u001F 开始的下一个十六进制值是 \u0020 AKA 空格。空格之前的所有内容都是换行符和无意义的废话。
我认为以下代码对您有用:
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();
}
如果您打算将该字符串用作查询字符串,则应考虑在发送之前使用Uri.EscapeUriString()
or 。Uri.EscapeDataString()
注意:您可能仍需要先从 char.IsControl() 中提取任何内容?