接上一篇:https://www.opengps.cn/Blog/View.aspx?id=392
关于控制台复制文本被截断,不能全部复制出来的问题。这是由于ASCII编码字符的“不可见字符”导致,不可见字符为控制字符,例如换行,回车等等。
socket通信开发中,由于发布在公网,所以会收到各种各样的数据包(公网环境下各种扫描器等工具也会连接到业务端口)
其中收到过一个ascii数据包,其中包含ascii码的控制字符,于是导致我不能从控制台有效的完整复制出全部日志。所以今天找了解决方案,就是替换掉这些不可见的字符为指定的字符。
本来是想选用 问号“?” 来标识这个位置是不可见字符。(注意,这里选取的时候,我需要确认我自己的业务数据包不包含“?”,不然会把这个业务的问号跟错乱数据包的问号混淆)
后来干脆直接忽略掉不可见字符
然后我找了个办法过滤出来,C#代码如下,兼容Unicode:
/// <summary>
/// 删除不可见字符
/// </summary>
/// <param name="sourceString">原始字符</param>
/// <returns>删除后结果</returns>
public static string DeleteUnVisibleChar(string sourceString)
{
StringBuilder s = new StringBuilder(131);
for (int i = 0; i < sourceString.Length; i++)
{
int Unicode = sourceString[i];
if (Unicode >= 16)
{
s.Append(sourceString[i].ToString());
}
}
return s.ToString();
}
原文地址:
https://www.opengps.cn/Blog/View.aspx?id=395
文章的更新编辑依此链接为准。欢迎关注源站原创文章!