今天在调试一段代码的时候,有一个输入不能为空的库函数抛出了异常(为空就会抛出异常,就是这么傲娇)。自己暗骂了自己一番,怎么这么大意,于是追溯源头,开始寻找输入控制的地方。但是当我找到时我惊呆了,我明明写了代码来控制输入不为空的啊!

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的更多相关文章

  1. 【Bug】看不见的分隔符: Zero-width space

    今天在调试一段代码的时候,有一个输入不能为空的库函数抛出了异常(为空就会抛出异常,就是这么傲娇).自己暗骂了自己一番,怎么这么大意,于是追溯源头,开始寻找输入控制的地方.但是当我找到时我惊呆了,我明明 ...

  2. -webkit-box-flex: 1;属性和 float 属性冲突造成元素看不见的BUG

    今天切图的时候发现了这个问题,样式是这样的: .check-btns-box .check-btn{float: left;-webkit-box-flex: 1;-moz-box-flex: 1;- ...

  3. 去除ZERO WIDTH SPACE 零宽字符: 看不见却占位置的字符

    ZERO WIDTH SPACE 由于历史原因,编码方案中保留着该类编码 解决方案 1. 替换 ```js str.replace(/[\u200B-\u200D\uFEFF]/g, ''); ``` ...

  4. threejs三角形Geometry的顶点时针顺序会导致三角形看不见

    var scene = new THREE.Scene(); var camera = new THREE.PerspectiveCamera(75,winSize.width/winSize.hei ...

  5. 看不到但摸得到的捣蛋鬼---Zero Width Space

    看不到但摸得到的捣蛋鬼---Zero Width Space 1.情况如何? 昨天,"某某某"的代码出现了一个bug.大概是这个情况: 有一个提示信息,需要展示,大概这样: 这行文 ...

  6. Telnet客户端连接服务器,看不见字符,只显示横线

    Telnet 窗口看不见字符,只显示小横线 在用telnet连接tomcat服务器的 时候,窗口中不显示字符,显示成一个一个的横线 解决办法: 按住“Ctrl+]” 回车解决问题

  7. MySQL 笔记整理(3) --事务隔离,为什么你改了我还看不见?

    笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> 3) --事务隔离,为什么你改了我还看不见? 简单来说,事务就是要保证一组数据操作,要么全部成功,要么全部失败.在MySQL中,事务 ...

  8. darktrace 亮点是使用的无监督学习(贝叶斯网络、聚类、递归贝叶斯估计)发现未知威胁——使用无人监督 机器学习反而允许系统发现罕见的和以前看不见的威胁,这些威胁本身并不依赖 不完善的训练数据集。 学习正常数据,发现异常!

    先说说他们的产品:企业免疫系统(基于异常发现来识别威胁) 可以看到是面向企业内部安全的! 优点整个网络拓扑的三维可视化企业威胁级别的实时全局概述智能地聚类异常泛频谱观测 - 高阶网络拓扑;特定群集,子 ...

  9. 为什么有的系统的事务码BSP_WD_CMPWB看不见Enhance Component这个按钮

    我的同事问我,为什么有的系统看不到下图7的按钮? 对比两张图里工具栏的差异. 答案 这是因为在图2(看不见Enhance Component按钮)的系统里,该系统的类型被设置为"SAP&qu ...

随机推荐

  1. Sql注入测试--Sqlmap

    慕课网sqlmap学习笔记: 一.SQL注入 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 例如 (1)在url上 ...

  2. 国家代号(CountryCode)与区号

    Countries and Regions 国家或地区 国际域名缩写 电话代码 时差 Angola 安哥拉 AO -7 Afghanistan 阿富汗 AF 93 0 Albania 阿尔巴尼亚 AL ...

  3. OpenCV——staturate_cast、掩模操作

    saturate_cast<>()模板函数,用于溢出保护 //大致的原理如下 ) data=; elseif(data>) data=; 掩模操作:https://blog.csdn ...

  4. Vue购物车

    index.html <!DOCTYPE html><html>    <head>        <meta charset="utf-8&quo ...

  5. Arduino入门笔记(2):Arduino的开发和virtualbreadboard仿真环境

    欢迎加入讨论群 64770604 1.开发环境 (1)下载开发环境 Arduino的开发环境从http://arduino.cc/en/Main/Software官网下载即可,分为windows版本. ...

  6. net 表格控件

    一个开源的表格控件,界面像Excel,看来很好,有机会在项目中使用:ReoGrid https://reogrid.net/

  7. WPF之Manipulation

    原文:WPF之Manipulation 需求:现,在窗口下有一个StackPanel控件. 1.可以拖动. 2.可以展开及收缩(不仅仅可以拖动还可以点击) 3.窗口向坐标轴一样分四个象限,在不同的区域 ...

  8. 【HNOI2016】矿区

    题面 题解 知识引入 1. 平面图 一个图\(G=(V,E)\),若能将其画在平面上,且任意两条边的交点只能是\(G\)的顶点,则称\(G\)可嵌入平面,或称\(G\)是可平面的. 可平面图在平面上的 ...

  9. MySQL主从报错1594

    一.主从报错 Relay log read failure 问题原因,MySQL主从使用的是kvm虚拟机,物理机超分严重,在负载高的情况下会kill掉占用资源最多的虚拟机,再启动后导致主从失败 mys ...

  10. C#精华面试题及答案 三

    PS.学了两三年的软件开发到头来发现连一些基本的东西都没掌握,通过面试题来检验自己的水平,让学习变得更加有方向性,也为将来择业而打下基础,不至于到时候手忙脚乱. 一.选择,填空题 1. 在ADO.NE ...