【Bug】看不见的分隔符: Zero-width space
今天在调试一段代码的时候,有一个输入不能为空的库函数抛出了异常(为空就会抛出异常,就是这么傲娇)。自己暗骂了自己一番,怎么这么大意,于是追溯源头,开始寻找输入控制的地方。但是当我找到时我惊呆了,我明明写了代码来控制输入不为空的啊!
if(!string.IsNullOrWhiteSpace(input))
Function(input);
我一度怀疑是我眼花了,于是回到案发现场,逐步调试。看到案发现场的那一刻我又吃了一惊,这玩意,你说不为空,真的不为空吗...

我看着这个奇异的符号,心中顿时生出了无数怨念,难道它的长度还能不是0?借助VS,我们来看看它的属性:

还真的是1...我倒要看看你究竟是何方神圣,于是我想到了ToArray函数,看看它能不能帮我抓出真凶。

看看我们捕捉到了什么? 经过一番查找,原来这货是U+200B,它还有个学名,叫做:Zero Width Space。它经常出现于各大HTML网页中,是一种看不见的分隔符。
但是要注意在C#中,我们使用string的判断为空的方法是无法识别它的。那么如何规避它的影响呢? 其实只需要在预处理文本的时候加上一句:
text = text.Replace("\u200B","");
这样就可以去掉text文本中的这种看不见的分隔符了。注意,U+200B有可能连续多个一起出现,所以尽量不要通过判断长度和字符来寻找和去除它。
【Bug】看不见的分隔符: Zero-width space的更多相关文章
- [BUG随想录] 看不见的分隔符: Zero-width space
今天在调试一段代码的时候,有一个输入不能为空的库函数抛出了异常(为空就会抛出异常,就是这么傲娇).自己暗骂了自己一番,怎么这么大意,于是追溯源头,开始寻找输入控制的地方.但是当我找到时我惊呆了,我明明 ...
- 去除ZERO WIDTH SPACE 零宽字符: 看不见却占位置的字符
ZERO WIDTH SPACE 由于历史原因,编码方案中保留着该类编码 解决方案 1. 替换 ```js str.replace(/[\u200B-\u200D\uFEFF]/g, ''); ``` ...
- 看不到但摸得到的捣蛋鬼---Zero Width Space
看不到但摸得到的捣蛋鬼---Zero Width Space 1.情况如何? 昨天,"某某某"的代码出现了一个bug.大概是这个情况: 有一个提示信息,需要展示,大概这样: 这行文 ...
- -webkit-box-flex: 1;属性和 float 属性冲突造成元素看不见的BUG
今天切图的时候发现了这个问题,样式是这样的: .check-btns-box .check-btn{float: left;-webkit-box-flex: 1;-moz-box-flex: 1;- ...
- threejs三角形Geometry的顶点时针顺序会导致三角形看不见
var scene = new THREE.Scene(); var camera = new THREE.PerspectiveCamera(75,winSize.width/winSize.hei ...
- JS ​ ZERO WIDTH SPACE
如上编码 ZERO WIDTH SPACE 在各个语言的表达. JS中使用 var b = a.replace(/\u200B/g,''); 来替换,去掉 ZERO WIDTH SPACE . ht ...
- Telnet客户端连接服务器,看不见字符,只显示横线
Telnet 窗口看不见字符,只显示小横线 在用telnet连接tomcat服务器的 时候,窗口中不显示字符,显示成一个一个的横线 解决办法: 按住“Ctrl+]” 回车解决问题
- MySQL 笔记整理(3) --事务隔离,为什么你改了我还看不见?
笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> 3) --事务隔离,为什么你改了我还看不见? 简单来说,事务就是要保证一组数据操作,要么全部成功,要么全部失败.在MySQL中,事务 ...
- darktrace 亮点是使用的无监督学习(贝叶斯网络、聚类、递归贝叶斯估计)发现未知威胁——使用无人监督 机器学习反而允许系统发现罕见的和以前看不见的威胁,这些威胁本身并不依赖 不完善的训练数据集。 学习正常数据,发现异常!
先说说他们的产品:企业免疫系统(基于异常发现来识别威胁) 可以看到是面向企业内部安全的! 优点整个网络拓扑的三维可视化企业威胁级别的实时全局概述智能地聚类异常泛频谱观测 - 高阶网络拓扑;特定群集,子 ...
随机推荐
- SqlServer存储过程模板
create procedure [spname]([spvariable])asbegin begin transaction begin try --具体sql过程 commit; end t ...
- js 的一些知识 摘自http://img0.pconline.com.cn/Pc_intranet/1105/13/313647_7.pdf
Js 问题分析--js 影响页面性能现状分析:问题陈述分析问题:抽象问题根源,通过实例或推理证明问题的严重性问题引申:以现有问题为点开始扩散,这将导致其它什么问题,或同一类型的问题问题总结:从分散开始 ...
- Independent Components Analysis:独立成分分析
一.引言 ICA主要用于解决盲源分离问题.需要假设源信号之间是统计独立的.而在实际问题中,独立性假设基本是合理的. 二.随机变量独立性的概念 对于任意两个随机变量X和Y,如果从Y中得不到任何关于X的信 ...
- 让Response.Redirect页面重定向更有效率
用 Redirect 方法可将浏览器重定向到另一个 URL,而不是将内容发送给用户. 这里有一篇文章介绍使用Redirect<Using Response.Redirect Effectivel ...
- WPF+通过配置文件生成菜单(Menu)+源码
这个月做项目,遇到过一个通过配置文件来生成菜单的解决方案,感觉挺优雅的,特地放到博客园来,以飨读者. 说来惭愧,以前做的项目都没有这样用过,都是固定死了.如果后续有需要加入菜单,还得在重新修改UI,然 ...
- Android 两个activity生命周期的关系
Acitivity的生命周期想必大家都清楚,但是两个activity之间其实不是独立各自进行的. 从第一个activity1启动另外一个activity2时,会先调用本activity1的onPaus ...
- C#+OpenGL+FreeType显示3D文字(3) - 用PointSprite绘制文字
C#+OpenGL+FreeType显示3D文字(3) - 用PointSprite绘制文字 上一篇实现了把文字绘制到OpenGL窗口,但实质上只是把含有文字的贴图贴到矩形模型上.本篇我们介绍用Poi ...
- Java中instanceof和isInstance区别详解
一次性搞定instanceof和isInstance,instanceof和isInstance长的非常像,用法也很类似,先看看这两个的用法: obj.instanceof(class) 也就是说这 ...
- salesforce 零基础学习(四十七) 数据加密简单介绍
对于一个项目来说,除了稳定性以及健壮性以外,还需要有较好的安全性,此篇博客简单描述salesforce中关于安全性的一点小知识,特别感谢公司中的nate大神和鹏哥让我学到了新得知识. 项目简单背景: ...
- PowerDesigner最基础的使用方法入门学习
1:入门级使用PowerDesigner软件创建数据库(直接上图怎么创建,其他的概念知识可自行学习) 我的PowerDesigner版本是16.5的,如若版本不一样,请自行参考学习即可.(打开软件即是 ...