博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[BUG随想录] 看不见的分隔符: Zero-width space
阅读量:5037 次
发布时间:2019-06-12

本文共 636 字,大约阅读时间需要 2 分钟。

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

if(!string.IsNullOrWhiteSpace(input))    Function(input);

我一度怀疑是我眼花了,于是回到案发现场,逐步调试。看到案发现场的那一刻我又吃了一惊,这玩意,你说不为空,真的不为空吗...

743588-20160813101817109-1956558041.png

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

743588-20160813101930875-1059916055.png

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

743588-20160813102042421-809919180.png

看看我们捕捉到了什么? 经过一番查找,原来这货是U+200B,它还有个学名,叫做:。它经常出现于各大HTML网页中,是一种看不见的分隔符。

但是要注意在C#中,我们使用string的判断为空的方法是无法识别它的。那么如何规避它的影响呢? 其实只需要在预处理文本的时候加上一句:

text = text.Replace("\u200B","");

这样就可以去掉text文本中的这种看不见的分隔符了。注意,U+200B有可能连续多个一起出现,所以尽量不要通过判断长度和字符来寻找和去除它。

转载于:https://www.cnblogs.com/SivilTaram/p/5767450.html

你可能感兴趣的文章
工厂模式
查看>>
比例运算和求和电路
查看>>
Luogu P3927 SAC E#1 - 一道中档题 Factorial
查看>>
scrapy框架初识
查看>>
卡片游戏
查看>>
bat 获取当前目录的父目录
查看>>
RocksDB系列二十二:RocksDB使用场景和特性
查看>>
WordPress插件开发教程:(一)插件简介
查看>>
Android学习笔记之View(一):LayoutInflater
查看>>
.net core 发布到docker
查看>>
web移动端浮层滚动阻止window窗体滚动JS/CSS处理
查看>>
字符串匹配的KMP算法-16张图片看明白
查看>>
[机器学习]回归--Support Vector Regression(SVR)
查看>>
hdoj_3476Cyclic Nacklace
查看>>
2019-05-23 奇虎ARP防火墙
查看>>
Linux内核同步机制之信号量与锁
查看>>
KafkaSpout的处理流程
查看>>
20162312 第十周学习总结
查看>>
POJ 3691 TRIE图+DP
查看>>
ES6初体验——(1)let和const命令
查看>>